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

Общие вопросы о Unity3D

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

Сообщение alborov011 24 авг 2021, 13:30

Есть кусок кода который выполняется примерно у 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);
        }
    }
 
alborov011
UNец
 
Сообщения: 10
Зарегистрирован: 15 ноя 2019, 20:44

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

Сообщение Alkos26Rus 24 авг 2021, 13:47

Я думаю вот эти 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);
 
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

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

Сообщение Dewa1s 24 авг 2021, 13:50

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

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

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

Сообщение alborov011 24 авг 2021, 13:56

А выполняется каждый кадр?
аниматор то еще древнее зло, обычно оно такого обращения не любит.
Закомментируй и глянь

Да, каждый кард. Закомментировал, немного стало лучше
alborov011
UNец
 
Сообщения: 10
Зарегистрирован: 15 ноя 2019, 20:44

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

Сообщение alborov011 24 авг 2021, 14:04

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

Начинаю жалеть что решил использовать Контроллер для передвижения юнитов, на что лучше заменить ? мне надо двигать каждый юнит в определенном направлении.
alborov011
UNец
 
Сообщения: 10
Зарегистрирован: 15 ноя 2019, 20:44

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

Сообщение Alkos26Rus 24 авг 2021, 14:54

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

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

Обычная капсула + ригид боди + свой контроллер. Я думаю можно ассеты поискать с уже готовым контроллером, по производительности будет лучше чем стандартный.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6