我做了線程和caroutines一些研究,我不知道如何「咬人」的規劃問題,我有:C#,團結 - caroutines,線程,邏輯,PROGRAMM結構
我需要運行simultainously字符AI在一個簡單的遊戲中 - 我需要能夠凍結/暫停執行一段指定的時間以及拖放/取消暫停。 我還需要運行一個foreach函數,它將從列表中提取字符併爲它們中的每個創建一個正在運行的AI,以及能夠根據需要創建新的AI(通過傳遞構造函數)。
也許這是一個簡單的事情,但我沒有經驗,請幫助。
我做了線程和caroutines一些研究,我不知道如何「咬人」的規劃問題,我有:C#,團結 - caroutines,線程,邏輯,PROGRAMM結構
我需要運行simultainously字符AI在一個簡單的遊戲中 - 我需要能夠凍結/暫停執行一段指定的時間以及拖放/取消暫停。 我還需要運行一個foreach函數,它將從列表中提取字符併爲它們中的每個創建一個正在運行的AI,以及能夠根據需要創建新的AI(通過傳遞構造函數)。
也許這是一個簡單的事情,但我沒有經驗,請幫助。
在Unity中,您不必過多考慮線程等,以創建一個同步行爲。例如;你用一個腳本創建一個GameObject,Enemy,以跟隨另一個GameObject;球員,其中有一個腳本,從你的運動。場景中的每個對象都會同時運行,而不需要線程等。例如,可以有5個GameObjects「Enemy」與EnemyFollowPlayer.cs
相同的腳本,它將同時運行5個不同的EnemyFollowPlayer。協程是如果你想在一個單獨的腳本中使用線程行爲,並且可能非常有用,但對於最基本的東西並不需要。
I made a quick GIF to illustrate how Unity handles simuntaneous execution如果從我的描述中不清楚。因爲你似乎對基於統一組件的架構有錯誤的想法。
在此GIF中,您會看到Test.cs,它會導致它附加的GameObject每移動一次void Update()
就會移動x + 0.001,Unity會爲我們每幀運行一次。我們看到它如何在1個GameObject上工作,並且當我們複製該GameObject時,我們看到它在2個GameObjects上同時運行,而不需要Coroutines,Threads或類似的東西。
協程很適合運行代碼異步! Unity也帶有一些便利的功能。檢查這個例子:
void SomeNormalMethod() {
StartCoroutine(AsyncMethod());
Debug.Log("I will Log first");
}
IEnumerator AsyncMethod() {
yield return new WaitForSeconds(3f);
Debug.Log("Then after 3 seconds, I will Log!");
}
協同程序的類型必須爲IEnumerator的,這讓我們獲得了yield
功能的方法。有了這個,我們可以使用Unity的功能WaitForSeconds(除其他外)讓這個異步代碼在做某事之前等待幾秒鐘,而不中斷SomeNormalMethod()繼續運行!不要忘記用StartCoroutine()
初始化它們,否則什麼都不會發生!
你到底有什麼問題?向我們展示一些代碼。你的Awnser沒有做任何事情。另外Unity3D是基於「基於組件的」體系結構,因此製作一個可以同時移動多個GameObjects的腳本不應該成爲這種挑戰。 – Smartis