Unity3D-打飞碟小游戏
生活随笔
收集整理的這篇文章主要介紹了
Unity3D-打飞碟小游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
打飛碟(Hit UFO)游戲
- 要求
- 游戲規則
- 游戲實現
- 代碼結構
- 導演類
- 飛碟工廠
- 場景控制類
- 動作管理類
- UI實現
- 積分規則
- 游戲運行截圖
- 參考資料
要求
- 游戲有 n 個 round,每個 round 都包括10 次 trial;
- 每個 trial 的飛碟的色彩、大小、發射位置、速度、角度、同時出現的個數都可能不同。它們由該 round 的 ruler 控制;
- 每個 trial 的飛碟有隨機性,總體難度隨 round 上升;
- 鼠標點中得分,得分規則按色彩、大小、速度不同計算,規則可自由設定
- 使用帶緩存的工廠模式管理不同飛碟的生產與回收,該工廠必須是場景單實例的
- 近可能使用前面 MVC 結構實現人機交互與游戲模型分離
工廠模式:
工廠模式:飛碟工廠的設計模式是單實例的工廠,分數和場景控制及各種預制的分離和使用
游戲規則
- 每個回合60s,玩過3關之后勝利
- 飛碟不同的顏色,大小對應不同的分數
- 回合60s內達到500分進入下一關,不能達到500分則失敗
游戲實現
代碼結構
導演類
public class SSDirector : System.Object {public static SSDirector _instance;public ISceneController currentScenceController { get; set; }public bool running { get; set; }public static SSDirector getInstance(){if (_instance == null){_instance = new SSDirector();}return _instance;}public int getFPS(){return Application.targetFrameRate;}public void setFPS(int fps){Application.targetFrameRate = fps;}public void NextScene(){Debug.Log("no next scene");} }飛碟工廠
工廠里面實現功能:GetDisk()和FreeDisk()
飛碟工廠類,在場景控制器需要某種飛碟的時候,飛碟工廠從倉庫(List free)中獲取這種飛碟,如果倉庫中沒有,則實例化一個新飛碟,然后添加used list 中
當場景控制器發現飛碟被打中或者飛碟掉出攝像機視野外,將執行回收飛碟,在used list 刪除飛碟,然后將該飛碟的數據添加到free_list中循環利用
- 偽代碼設計
- 代碼實現
- 飛碟數據由round的ruler控制
場景控制類
- 場景單實例,運用模板,可以為每個 MonoBehaviour子類 創建一個對象的實例
- 射擊條件
- 加載飛碟,從飛碟工廠得到飛碟并將飛碟加入場景
- 檢查飛碟是否需要回收
- 判斷游戲狀態
動作管理類
public class RoundActionManager : SSActionManager, ISSActionCallback {public RoundController scene;public MoveToAction action1, action2;public SequenceAction saction;float speed;public void addRandomAction(GameObject gameObj){int[] X = { -20, 20 };int[] Y = { -5, 5 };int[] Z = { -20, -20 };Vector3 starttPos = new Vector3(UnityEngine.Random.Range(-20, 20),UnityEngine.Random.Range(-5, 5),UnityEngine.Random.Range(50, 10));gameObj.transform.position = starttPos;Vector3 randomTarget = new Vector3(X[UnityEngine.Random.Range(0, 2)],Y[UnityEngine.Random.Range(0, 2)],Z[UnityEngine.Random.Range(0, 2)]);MoveToAction action = MoveToAction.getAction(randomTarget, gameObj.GetComponent<DiskData>().speed);RunAction(gameObj, action, this);}protected void Start(){scene = (RoundController)SSDirector.getInstance().currentScenceController;scene.actionManager = this;}protected new void Update(){base.Update();}public void actionDone(SSAction source){Debug.Log("Done");} }UI實現
代碼詳見/asset/script/UserGUI.cs
積分規則
飛碟速度越快,體積越小,得到的分數就越高,不同顏色的飛碟得分情況的也不同
public class ScoreRecorder : MonoBehaviour {private float score;public float getScore(){return score;}public void Record(GameObject disk){score += (100 - disk.GetComponent<DiskData>().size *(20 - disk.GetComponent<DiskData>().speed));Color c = disk.GetComponent<DiskData>().color;switch (c.ToString()){case "red":score += 250;break;case "green":score += 200;break;case "blue":score += 150;break;case "yellow":score += 100;break;}}游戲運行截圖
項目鏈接
視頻演示鏈接
參考資料
感謝此篇參考博客
爆炸效果學習
總結
以上是生活随笔為你收集整理的Unity3D-打飞碟小游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3d学习笔记(四)——打飞碟小游戏
- 下一篇: my射飞碟小游戏