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

Оптимизация скрипта Unity

СообщениеДобавлено: 24 авг 2021, 13:30
alborov011
Есть кусок кода который выполняется примерно у 50-100 объектов на сцене, Profiler показывает что, этот кусок кода съедает 20-25% производительности. Не могу понять почему.
Да, вызовов много, но снизу есть другой скрипт которой вызывается также часто но съедает всего 4% (смотреть картинкуhttps://ibb.co/89KfsNG или https://ibb.co/FBH6Bj5)


Вот код:
Синтаксис:
Используется csharp
            botMovmentDirection = color == Colors.blue ? myMainCharacter.direction : myMainCharacter.botDirection;
            anim.SetBool("Run", botMovmentDirection != Vector3.zero);
            controller.Move(botMovmentDirection * speed * Time.deltaTime);
            controller.Move((myMainGmTransform.position + newPos - transform.position) * speed * Time.deltaTime);
            LookToDirection(botMovmentDirection);

    private void LookToDirection(Vector3 direction)
    {
        if (direction.magnitude >= 0.1)
        {

            float targetRotation = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg;
            float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref turnSmoothVecloity, smoothTime);
            transform.rotation = Quaternion.Euler(0, angle, 0);
        }
    }
 

Re: Оптимизация скрипта Unity

СообщениеДобавлено: 24 авг 2021, 13:47
Alkos26Rus
Я думаю вот эти 3 строчки. Некогда не пользовался контроллером, поэтому не знаю возможно controller.Move довольно медленная. Вот что косается anim.SetBool и прочих типов переменных, тоже не быстрая операция. У меня например около 300 солдат, и мне пришлось назначения переменных в аниматоре запихивать в небольшой таймер, тгда стало по лучше.

Синтаксис:
Используется csharp
            anim.SetBool("Run", botMovmentDirection != Vector3.zero);
            controller.Move(botMovmentDirection * speed * Time.deltaTime);
            controller.Move((myMainGmTransform.position + newPos - transform.position) * speed * Time.deltaTime);
 

Re: Оптимизация скрипта Unity

СообщениеДобавлено: 24 авг 2021, 13:50
Dewa1s
alborov011 писал(а):Есть кусок кода который выполняется примерно у 50-100 объектов на сцене, Profiler показывает что, этот кусок кода съедает 20-25% производительности. Не могу понять почему.
Да, вызовов много, но снизу есть другой скрипт которой вызывается также часто но съедает всего 4% (смотреть картинкуhttps://ibb.co/89KfsNG или https://ibb.co/FBH6Bj5)

А выполняется каждый кадр?
аниматор то еще древнее зло, обычно оно такого обращения не любит.
Закомментируй и глянь
anim.SetBool("Run", botMovmentDirection != Vector3.zero);

Re: Оптимизация скрипта Unity

СообщениеДобавлено: 24 авг 2021, 13:56
alborov011
А выполняется каждый кадр?
аниматор то еще древнее зло, обычно оно такого обращения не любит.
Закомментируй и глянь

Да, каждый кард. Закомментировал, немного стало лучше

Re: Оптимизация скрипта Unity

СообщениеДобавлено: 24 авг 2021, 14:04
alborov011
Alkos26Rus писал(а):Я думаю вот эти 3 строчки. Некогда не пользовался контроллером, поэтому не знаю возможно controller.Move довольно медленная. Вот что косается anim.SetBool и прочих типов переменных, тоже не быстрая операция. У меня например около 300 солдат, и мне пришлось назначения переменных в аниматоре запихивать в небольшой таймер, тгда стало по лучше.

Начинаю жалеть что решил использовать Контроллер для передвижения юнитов, на что лучше заменить ? мне надо двигать каждый юнит в определенном направлении.

Re: Оптимизация скрипта Unity

СообщениеДобавлено: 24 авг 2021, 14:54
Alkos26Rus
alborov011 писал(а):
Alkos26Rus писал(а):Я думаю вот эти 3 строчки. Некогда не пользовался контроллером, поэтому не знаю возможно controller.Move довольно медленная. Вот что косается anim.SetBool и прочих типов переменных, тоже не быстрая операция. У меня например около 300 солдат, и мне пришлось назначения переменных в аниматоре запихивать в небольшой таймер, тгда стало по лучше.

Начинаю жалеть что решил использовать Контроллер для передвижения юнитов, на что лучше заменить ? мне надо двигать каждый юнит в определенном направлении.

Обычная капсула + ригид боди + свой контроллер. Я думаю можно ассеты поискать с уже готовым контроллером, по производительности будет лучше чем стандартный.