Страница 1 из 1

Coroutine на Android & IOS

СообщениеДобавлено: 01 июл 2019, 12:00
Kabanelloo
Доброго времени суток!! Написал ИИ босса, весь функционал зашит на Coroutine , самые банальные поведения переключаются именно таким путем.
Есть гуру по использованию 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;
        }
    }
 


А также есть 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;
        }
       
    }
 

Re: Coroutine на Android & IOS

СообщениеДобавлено: 01 июл 2019, 12:06
~AvA~
Ну, на счёт мнения гур не знаю, но как-то не сталкивался с проблемами с корутинами на мобилках)
Если есть такие - свистите сейчас или молчите всегда ))

Re: Coroutine на Android & IOS

СообщениеДобавлено: 01 июл 2019, 12:16
Kabanelloo
~AvA~ писал(а):как-то не сталкивался с проблемами с корутинами на мобилках


Как то раз грешил на Карутины, оказалось, что FPS был разный и логично расчеты функций были разными.. Time.deltaTime решил все)) Все вроде работает на Android, но иногда есть сомнения )))