- •Unity Script
- •Глава 1 Введение
- •Глава 2 Сценарии
- •Глава 3 Основные понятия
- •1. Назначение ссылочных типов переменных при помощи инспектора
- •2. Расположение объектов в окне иерархии
- •3. Имена и теги
- •4. Принятие в качестве параметра
- •5. Все скрипты одного типа
- •1. Используйте статическую типизацию.
- •2. Используйте #pragma strict
- •3. Кешируйте найденные компоненты.
- •4. Используйте встроенные масивы.
- •5. Не вызывайте функцию, если Вам это не нужно.
- •1. Носледование от MonoBehaviour
- •2.Использование функций Awake или Start для инициализации.
- •3. Имя класса должно соответствовать имени файла.
- •4. Корутины имеют иной синтаксис в c#.
- •5. Не используйте пространства имен.
- •6. Только публичные поля сериализуются и показываются в инспекторе.
- •7. Избегайте использования конструкторов или инициализации переменных.
- •1. Все скрипты в "Standard Assets", "Pro Standard Assets" или "Plugins" компилируются первыми.
- •2. Все скрипты в "Standard Assets/Editor", "Pro Standard Assets/Editor" или "Plugins/Editor" компилируются далее.
- •3. Все другие скрипты вне "Editor" компилируются далее.
- •4. Все скрипты в папке "Editor" компилируются последними.
1. Назначение ссылочных типов переменных при помощи инспектора
Вы можете назначить переменные любого типа, в вашем скрипте, для того чтобы в дальнейшем, вы могли использовать любой объект в вашем скрипте.
//Перемещение объекта с использованием переменной Target
var target : Transform;
function Update(){
target.Translate(0,1,0);
}
Вы также можете выставить ссылочный тип на другие объекты инспектора. Ниже вы можете видеть пример скрипта, имеющего ссылочный тип под любой сторонний JS скрипт.
//Устанавливаем FooDoSomething на переменную Target принемаемую в инспекторе
var target : OtherScript;
function Update(){
//Устанавливаем значение переменной Foo в ссылочный тип переменной Target
target.foo = 2;
target.DoSomething(“Hello”);
}
2. Расположение объектов в окне иерархии
Вы можете находить дочерние и родительские объекты через компонент Transform:
//Найти дочерний объект “Hand”
transform.Find(“Hand”).Translate(0,1,0);
Как только вы нашли нужный вам объект, применив компонент Transform, вы можете использовать GetComponent, чтобы найти компоненты данного объекта.
//Найти дочерний объект под названием “Hand”
//В компоненте OtherScript назначенный на этот объект, меняем значение переменной Foo на 2
.transform.Find(“Hand”).GetComponent(OtherScript).foo = 2;
.transform.Find(“Hand”).GetComponent(OtherScript).DoSomething(“Hello”);
.transform.Find(“Hand”).rigidbody.AddForce(0,10,0);
Вы можете использовать цикл для всех дочерних объектов:
//Переместить все дочерние объекты на 10 единиц вверх
for ( var child : Transform in transform) {
child.Translate(0, 10, 0);
}
3. Имена и теги
Вы можете искать игровые объекты с определенными тегами использованием GameObject.FindWithTag и GameObject.FindGameObjectsWithTag . Используйте GameObject.Find для поиска любого объекта по имени.
function Start () {
// По имени
var go = GameObject.Find ( "SomeGuy" );
go.transform.Translate(0, 1, 0);
// По тегу
var player = GameObject.FindWithTag ( "Player" );
player.transform.Translate(0, 1, 0);
}
Вы также можете использовать и GetComponent для того чтобы найти какие-либо компоненты назначенные на найденный объект:
function Start () {
// По имени
var go = GameObject.Find ( "SomeGuy" );
go.GetComponent(OtherScript).DoSomething();
// По тегу
var player = GameObject.FindWithTag ( "Player" );
player.GetComponent(OtherScript).DoSomething();
}
4. Принятие в качестве параметра
Некоторые сообщения, содержат подробную информацию об события. Например триггер задействуется после того как какой-либо объект пересечёт колайдер на который назначен этот компонент.
Например:
function OnTriggerStay ( other : Collider ) {
if (other.rigidbody)
other.rigidbody.AddForce(0, 2, 0);
}
Или мы можем добраться до любого компонента:
function OnTriggerStay ( other : Collider ) {
/ / Если есть другие коллайдеры OtherScript задействуется
/ / Вызываем DoSomething в нем.
if (other.GetComponent(OtherScript))
other.GetComponent(OtherScript).DoSomething();
}
