Просмотров: 1943 - Заполнять: Chort - 11.03.2013 14:42:18
Работая с Unity3D часто приходится пользоваться такой замечательной фишкой как StartCoroutine. Говоря простыми словами - можно вызвать метод который как бы будет исполняться одновременно со работой игры не останавливая ее. Такой себе псевдо-поток. Разъяснение так себе, лучше покажу как такое сделать и как таким пользоваться.
Первое что сделаем - простенький менеджер.
GeSHi: C# public class CoroutinesManager { private readonly List <IEnumerator > _coroutines = new List <IEnumerator > (); public void Start(IEnumerator enumerator) { _coroutines.Add (enumerator); } public void Update() { for (int i = _coroutines.Count - 1; i >= 0; i--) { IEnumerator enumerator = _coroutines[i]; if(!enumerator.MoveNext()) _coroutines.RemoveAt(i); } } } class Game1 : Game { ... CoroutinesManager _coroutinesManager = new CoroutinesManager (); ... protected override void Update (GameTime gameTime) { ... coroutinesManager .Update(); } }
Добавлено за 0.014 секунд, используя GeSHi 1.0.8.2
Дальше простенькие примеры использования:
Пример №1: Меняем цвет по нажатии на клавишу
GeSHi: C# private IEnumerator CoroutineTest(GameTime gameTime) { float time = 0; while (time < 10) { time += (float)gameTime.ElapsedGameTime.TotalSeconds; _color = Color.Lerp(Color.CornflowerBlue, Color.Green, time / 10); yield return null; } } protected override void Update (GameTime gameTime) { ... if (Keyboard.GetState ().IsKeyDown (Keys.R)) manager.Start (CoroutineTest(gameTime)); ... }
Добавлено за 0.013 секунд, используя GeSHi 1.0.8.2
Пример №2: Запускаем анимацию смерти персонажа и только потом удаляем его.
GeSHi: C# private IEnumerator CoroutineTest2(Unit unit, AnimationSet dieAnimation) { unit.StartAnimation (dieAnimation); while (!unit.Animation.IsFinished) { yield return null; } _units.Remove (unit); }
Добавлено за 0.008 секунд, используя GeSHi 1.0.8.2
Как видите, все методы основываются на инструкции yield return, и после каждого ее вызова мы возвращаемся в метод Update, и продолжаем работу на следующий вызов метод Update.
В общем, пользуйтесь на здоровье
|