В Unity вам не нужно слишком много думать о потоках и т. Д., Чтобы создать одновременное поведение. Например; вы создаете GameObject, Enemy, со скриптом, чтобы следовать за другим GameObject; Игрок, у которого есть сценарий, который движется от вас. Каждый объект в сценах со сценарием будет работать одновременно, без необходимости в Threads и т. Д. Может быть, например, 5 GameObjects «Enemy» с тем же сценарием EnemyFollowPlayer.cs
, и он будет работать как 5 разных EnemyFollowPlayer одновременно. Coroutines - это если вы хотите, чтобы потоковое поведение в одном одиночном скрипте могло быть очень полезным, но не нужно для самых простых вещей.
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 GameObjects без необходимости в Coroutines, Threads или что-нибудь подобное.
Coroutines отлично подходят для запуска кода async! 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