unity3d实现简单的打飞碟游戏
游戲內(nèi)容
游戲有n個(gè)round,每個(gè)round發(fā)射10次trial,每個(gè)trial的飛碟都可能不同,包括速度角度得分等,使用鼠標(biāo)進(jìn)行射擊,點(diǎn)中即表示射擊成功。
游戲要求
使用帶緩存的工廠模式來管理飛碟的生產(chǎn)與再利用,工廠使用單例模式。
游戲的設(shè)計(jì)
由于需要使用帶緩存的工廠,所以使用兩個(gè)list來儲(chǔ)存正在使用的飛碟,與沒有使用的飛碟。每次需要工廠輸出一個(gè)飛碟的時(shí)候就去未被使用的鏈中尋找相應(yīng)的飛碟,如果有就直接拿到正在使用的飛碟的鏈中,并返回;如果沒有就需要?jiǎng)?chuàng)建一個(gè)相應(yīng)的飛碟,并放入正在使用的飛碟的鏈中。這樣在一開始會(huì)不斷的創(chuàng)建飛碟,但是創(chuàng)建之后的飛碟并沒有被刪除,而是存起來了,簡(jiǎn)單的將其active設(shè)置為false即可,這樣就被隱形了,再次使用的時(shí)候初始化一下位置即可,達(dá)到循環(huán)使用的目的。下面給出工廠中生產(chǎn)飛碟的代碼:
這里的tag是對(duì)飛碟對(duì)象的一個(gè)標(biāo)記,這里用了3種飛碟,所以只使用3個(gè)tag即可,對(duì)于tag的使用需要自己去添加
這樣就可以直接設(shè)置了。
然后是對(duì)飛碟的回收:
public void free(GameObject ufo_){for(int i = 0; i < use.Count; i++){if (ufo_.GetInstanceID() == use[i]._ufo.gameObject.GetInstanceID()){use[i]._ufo.gameObject.SetActive(false);rest.Add(use[i]);use.Remove(use[i]);break;}}}使用GetInstanceID來確認(rèn)需要回收的飛碟是鏈中的哪一個(gè),找到之后將其從使用鏈中刪去,再添加到未使用鏈中,同時(shí)設(shè)置其不可見。
在這個(gè)控制類中需要有一個(gè)工廠來持續(xù)生產(chǎn)飛碟,然后還需要再設(shè)計(jì)一個(gè)集合來儲(chǔ)存需要運(yùn)行的飛碟,這里其實(shí)可以直接調(diào)用工廠里的正在使用的鏈,但是為了做到盡可能少的耦合,就分開來處理。
對(duì)于飛碟的運(yùn)動(dòng)在update函數(shù)中實(shí)現(xiàn),這點(diǎn)很簡(jiǎn)單。然后是對(duì)每個(gè)trial的設(shè)置,需要對(duì)兩個(gè)trial之間的間隔時(shí)間進(jìn)行控制,然后每次trial根據(jù)一個(gè)規(guī)則輸出數(shù)量不同的飛碟。然后將工廠中拿到的飛碟放到之前說的那個(gè)集合中,表示場(chǎng)景中正在使用與運(yùn)動(dòng)的飛碟。接著調(diào)用移動(dòng)的函數(shù),讓飛碟按照既定的路線運(yùn)動(dòng),具體代碼如下:
在每次運(yùn)動(dòng)之后還需要判斷一下飛碟是否飛出視野,一旦飛碟飛出了一段距離就需要判定它消失(當(dāng)然不能給射擊者加分),如果不處理這個(gè)問題的話,飛碟就會(huì)一直存在,一直飛下去,也無法得到重用,玩家也無法將其射中,這樣就會(huì)耗費(fèi)資源,降低游戲效率
對(duì)規(guī)則的控制
對(duì)于每個(gè)round輸出的飛碟與飛碟的分?jǐn)?shù)等信息都需要一個(gè)規(guī)則來控制,這里對(duì)規(guī)則的設(shè)計(jì)很簡(jiǎn)單,也包括對(duì)游戲的運(yùn)行的控制。具體內(nèi)容見代碼即可。
UI的一些顯示
這里使用了一個(gè)text來顯示游戲的得分等相關(guān)信息,具體設(shè)計(jì)如下。
首先得到這個(gè)文本框
注意這里需要對(duì)游戲中建立的空對(duì)象添加相應(yīng)的組件
添加這個(gè)text mesh,然后就可以在游戲中調(diào)用并對(duì)它進(jìn)行設(shè)置了。
其設(shè)置內(nèi)容的方法與位置如下
然后是添加一個(gè)開始按鈕
用戶的點(diǎn)擊射擊
這里模擬一條射線來射擊,調(diào)用Raycast來查看是否射中,射中的對(duì)象就是hit,然后對(duì)這個(gè)對(duì)象進(jìn)行操作即可。這里使用的cam是一個(gè)camera,在start中進(jìn)行初始化,為主攝像機(jī)
直接將老師提供的代碼ctrl c加ctrl v,然后直接調(diào)用即可。
至此整個(gè)游戲的設(shè)計(jì)完成,下面是游戲運(yùn)行中的截圖
項(xiàng)目地址
總結(jié)
以上是生活随笔為你收集整理的unity3d实现简单的打飞碟游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 改进飞碟(Hit UFO)游戏
- 下一篇: HW5-打飞碟