Есть гуру по использованию Coroutine в мобильных устройствах, можно ли на них положиться ?
Для примера вот такое поведение атаки босса:
В итоге каждый Coroutine имеет свою свою роль, но в процессе работает только несколько Coroutine.
Код выглядит как класс помойка, в нем описаны все свойства босса и все его поведения.
Этим кодом я показываю как я много их использую, стал переживать за производительность и синхронизацию с устройством.
Синтаксис:
Используется csharp
private IEnumerator BehaviorAttack()
{
StartCoroutine(BackToPosition()); // в момент атаки возвращаться на исходное положение.
while (bullets > 0)
{
switch (Random.Range(1, 4)) // хаотично двигается между путями.
{
case 1:
MoveSide(Track.Right);
break;
case 2:
MoveSide(Track.Left);
break;
case 3:
MoveSide(Track.Center);
break;
}
switch (Random.Range(1, 3)) // Атакует двумя способами.
{
case 1: AttackBomb();
break;
case 2:
yield return StartCoroutine(DetectRoadBeforPlayer()); // ожидание в поиске доступной разрушаемой дороги, атакой дороги, чтобы персонаж провалился..
AttackLaser();
break;
}
bullets--;
GameInterface.Instance.BossAmmo(1f / startBullets); // уменьшение оружия интерфейс.
yield return new WaitForSeconds(Random.Range(0.2f, 0.6f)); // задержка между выстрелами.
}
MoveSide(Track.Center); // Центр трека, отчет новых действий.
while (positionRecovery) // Ожидание восстановления позиции для следующих проведений.
{
yield return null;
}
}
{
StartCoroutine(BackToPosition()); // в момент атаки возвращаться на исходное положение.
while (bullets > 0)
{
switch (Random.Range(1, 4)) // хаотично двигается между путями.
{
case 1:
MoveSide(Track.Right);
break;
case 2:
MoveSide(Track.Left);
break;
case 3:
MoveSide(Track.Center);
break;
}
switch (Random.Range(1, 3)) // Атакует двумя способами.
{
case 1: AttackBomb();
break;
case 2:
yield return StartCoroutine(DetectRoadBeforPlayer()); // ожидание в поиске доступной разрушаемой дороги, атакой дороги, чтобы персонаж провалился..
AttackLaser();
break;
}
bullets--;
GameInterface.Instance.BossAmmo(1f / startBullets); // уменьшение оружия интерфейс.
yield return new WaitForSeconds(Random.Range(0.2f, 0.6f)); // задержка между выстрелами.
}
MoveSide(Track.Center); // Центр трека, отчет новых действий.
while (positionRecovery) // Ожидание восстановления позиции для следующих проведений.
{
yield return null;
}
}
А также есть Coroutine типа переключатели:
Синтаксис:
Используется csharp
private IEnumerator BehaviorOne()
{
track = Random.Range(1, 3) == 1? Track.Right : Track.Left; // случайны путь
yield return StartCoroutine(ManeuverLeftRight(track)); // ожидание маневра
yield return StartCoroutine(ManeuverUpDown(Track.Up)); // ожидание пробитие трека сверху вниз.
switch (Random.Range(1, 3)) // переключение на случайные поведения..
{
case 1: StartCoroutine(BehaviorTwo());
break;
case 2:
StartCoroutine(BehaviorThree());
break;
}
}
{
track = Random.Range(1, 3) == 1? Track.Right : Track.Left; // случайны путь
yield return StartCoroutine(ManeuverLeftRight(track)); // ожидание маневра
yield return StartCoroutine(ManeuverUpDown(Track.Up)); // ожидание пробитие трека сверху вниз.
switch (Random.Range(1, 3)) // переключение на случайные поведения..
{
case 1: StartCoroutine(BehaviorTwo());
break;
case 2:
StartCoroutine(BehaviorThree());
break;
}
}