Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unity Script.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
57.72 Кб
Скачать

1. Используйте статическую типизацию.

Когда Вы пишете на JavaScript наиболее важная оптимизация - использование статической типизации вместо динамической. Unity использует технику, называемую "type inference" для автоматического конвертирования JavaScript конструкций в статически типизированный код без необходимости Вам проделывать эту работу.

var foo = 5;

В примере выше foo будет автоматически преобразована в целый тип. Т.о. Unity может использовать множество оптимизаций времени компиляции, без дорогостоящего поиска типа переменной. Это одна из причин почему реализация JavaScript в Unity в среднем в 20 раз быстрее чем другие реализации.

Единственная проблема, что иногда не все может быть преобразовано таким образом, что возвращает Unity к динамической типизации. Из-за динамической типизации писать код на JavaScript проще, однако это же делает код медленнее.

Давайте посмотрим на некоторые примеры.

function Start () {

var foo = GetComponent(MyScript);

foo.DoSomething();

}

Здесь foo будет динамически типизировано, т.о. вызов функции DoSomething будет намного более долгим, чем необходимо - из-за того, что тип foo неизвестен нужно выяснить поддерживается ли он функцией DoSomething и если да - вызвать ее.

function Start () {

var foo : MyScript = GetComponent(MyScript);

foo.DoSomething();

}

Тут мы напрямую указываем тип foo. Вы при этом получите намного более хорошую производительность.

2. Используйте #pragma strict

Теперь проблема, что Вы можете не заметить, что используете динамическую типизацию. #pragma strict - Ваше спасение! Просто добавьте #pragma strict на самый верх скрипта, и Unity запретит динамическую типизацию в этом скрипте, силой заставляя Вас использовать статическую. Когда при компиляции тип не может быть определен, Unity выведет ошибку компиляции. Так в этом случае, foo произведет ошибку при компиляции:

#pragma strict

function Start () {

var foo : MyScript = GetComponent(MyScript) as MyScript;

foo.DoSomething();

}

3. Кешируйте найденные компоненты.

Еще одна оптимизация - кэширование компонентов. Эта оптимизация, к сожалению, требует некоторых усилий при кодировании и не всегда стоит затраченных на нее усилий. Но если Ваш скрипт действительно использует их множество и Вам нужно получить последний кусочек производительности, это может быть очень хорошей оптимизацией.

Когда бы Вы не получали компонент через GetComponent или переменную доступа, Unity находит правильный компонент в игровом объекте. Время на этот поиск может быть сохранено кэширование ссылки на компонент в приватной переменной.

Просто замените это:

function Update () {

transform.Translate(0, 0, 5);

}

на это:

private var myTransform : Transform;

function Awake () {

myTransform = transform;

}

function Update () {

myTransform.Translate(0, 0, 5);

}

Последний код будет работать намного быстрее, т.к. Unity не нужно искать компонент transform в игровом объекте каждый кадр. Это же применимо для компонентов - скриптов, где Вы используете GetComponent вместо transform или других свойств.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]