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

4. Используйте встроенные масивы.

Встроенные массивы быстрые, очень быстрые, так что используйте их.

В то время как классы ArrayList или Array легче для использования т.к. Вы можете легко добавлять элементы, они не имеют такой же производительности elements. Встроенные массивы имеют фиксированный размер, но в большинстве случаев Вы знаете максимальный размер заранее и можете заполнить массив позже. Наилучшее во встроенных массивах то, что они напрямую содержат данные в одном плотном буфере без дополнительной информации о типе данных или других накладных расходов. Т.о. итерация в них очень легка, т.к. они располагаются линейно в памяти.

private var positions : Vector3[];

function Awake () {

positions = new Vector3[100];

for (var i = 0; i < 100; i++)

positions[i] = Vector3.zero;

}

5. Не вызывайте функцию, если Вам это не нужно.

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

var target : Transform;

function Update () {

// Early out if the player is too far away.

if (Vector3.Distance(transform.position, target.position) > 100)

return;

// perform real work work...

}

Это не очень хорошее решение, т.к. Unity вызывает функцию update и Вы производите работу каждый кадр. Лучшее решение - отключить поведение пока игрок не приблизится. Есть 3 пути сделать это:

1. Использование OnBecameVisible и OnBecameInvisible. Вызовы этих функций завязаны с системой рендеринга. Когда любая камера может увидеть объект, вызывается OnBecameVisible, когда объект выходит из области видимости всех камер вызывается OnBecameInvisible. В некоторых случаях это очень полезно. Но для AI это не стоит использовать, т.к. враги перестанут действовать, когда Вы отвернете от них камеру.

function OnBecameVisible () {

enabled = true;

}

function OnBecameInvisible () {

enabled = false;

}

2. Использование триггеров. Простой сферический триггер может чудесно работать в данном случае. Вы получите вызовы OnTriggerEnter/Exit при входе/выходе в колайдер

function OnTriggerEnter (c : Collider) {

if (c.CompareTag("Player"))

enabled = true;

}

function OnTriggerExit (c : Collider) {

if (c.CompareTag("Player"))

enabled = false;

}

3. Использование Корутин. Проблема с Unity в том, что она вызывается каждый кадр. Вполне возможно, проверка расстояния до игрока может быть выполнена только каждые 5 секунд. Это позволит сэкономить много времени затраченного процессором на расчеты.

Использование C# и Boo

Помимо синтаксиса, есть некоторые различия при написании сценариев в C # или Boo. Наиболее примечательными являются:

1. Носледование от MonoBehaviour

Все скрипты поведения должны наследоваться от MonoBehaviour (напрямую или через другие скрипты). Это делается автоматически в Javascript, но должно быть указано прямо в C# или Boo. Если Вы создаете Ваш скрипт в Unity через Asset -> Create -> C Sharp/Boo Script menu, the created template will already contain the necessary definition.

public class NewBehaviourScript : MonoBehaviour {...} // C#

class NewBehaviourScript (MonoBehaviour): ... # Boo

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