Unityでは、同時動作を作成するためにスレッドなどについてあまり考える必要はありません。例えば;別のGameObjectに従うスクリプトを使って、GameObject、Enemyを作成します。 Player、あなたからの動きを取り入れるスクリプトを持っています。スクリプトを持つシーン内のすべてのオブジェクトは、スレッドなどを必要とすることなく、同時に実行されます。例えば、同じスクリプトEnemyFollowPlayer.cs
で5つのGameObjects "Enemy"があり、同時に5つの異なるEnemyFollowPlayerとして実行されます。コルーチンは、1つのスクリプト内でスレッドの振る舞いをしたい場合に非常に便利ですが、最も基本的なものには必要ありません。
I made a quick GIF to illustrate how Unity handles simuntaneous execution私の説明からわかりません。あなたは、ユニティコンポーネントベースのアーキテクチャについて間違った考え方を持っているようです。
このGIFには、Test.csがあります。これは、添付されているGameObjectにx = 0.001を移動させます。毎回void Update()
が実行されます。これはUnityが毎フレーム実行します。私たちは1 GameObjectでどのように動作するのかを見ています。そのGameObjectをコピーすると、2つのGameObjectで同時に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!");
}
Aコルーチンは私たちにyield
機能へのアクセスを与えるタイプのIEnumeratorの方法でなければなりません。これにより、Unityの機能WaitForSeconds(他の中でも)を使用して、何かをする前にこの非同期コードを数秒待機させ、SomeNormalMethod()の実行を中断することなく継続できます! StartCoroutine()
でそれらを初期化することを忘れないでください。そうしないと何も起こりません!
あなたの問題は何ですか?いくつかのコードを見せてください。あなたの鎧師は何もしない努力を示しています。また、Unity3Dは 'Component-Based'アーキテクチャなので、複数のGameObjectsを同時に動かすスクリプトを作ることは、それほど難しいことではありません。 – Smartis