Unity遊戲狀態指令碼控制思考
阿新 • • 發佈:2018-12-27
最近忙,好久沒發部落格的,見諒。
突發奇想,Unity的各個指令碼是怎麼有條不紊運作的,於是自己簡單的用C#控制檯程式模擬下,只是理下思路,具體的流程自己去體會,輕噴,不囉嗦,直接上程式碼。
首先是遊戲指令碼介面,如下:
interface IGame
{
void Awake();
void Start();
void Update();
}
有了指令碼介面我們就能夠去實現具體邏輯了,這裡就簡單的實現兩個指令碼。
public class GameBase:IGame { public GameBase() { } public void Awake() { Console.WriteLine("Awake"); } public void Start() { Console.WriteLine("Start"); } public void Update() { Console.WriteLine("Update"); } } public class MyGameScript:IGame { public MyGameScript() { } public void Awake() { Console.WriteLine("MyGameScript Awake"); } public void Start() { Console.WriteLine("MyGameScript Start"); } public void Update() { Console.WriteLine("MyGameScript Update"); } }
腳本里面的函式你可以做任意想做的事情,下面開始遊戲邏輯了,其實也很簡單,就分兩步,一個是註冊指令碼,一個是遊戲迴圈。
class Program { public static List<IGame> scripts = new List<IGame>(); static void Main(string[] args) { RegistScripts(); GameLoop(); } private static void GameLoop() { foreach (var script in scripts) { script.Awake(); } foreach (var script in scripts) { script.Start(); } while (true) { Thread.Sleep(1000); //這裡為了演示 控制幀率 foreach (var script in scripts) { script.Update(); } } } private static void RegistScripts() { GameBase gb = new GameBase(); MyGameScript mgs = new MyGameScript(); scripts.Add(gb); scripts.Add(mgs); } }
總結:Unity的內部實現其實不是這樣的,這裡只是通過自己的方式去實現,最後上一張執行的結果。