Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

using UnityEngine; //Подключает основные функции Unity



C# Unity3D

Библиотеки:

 

using UnityEngine; //Подключает основные функции Unity

using System; //Позволяет работать с математическими выражениями и т.д.

using System.Collections; //Подключает основные расширения(коллекции)

using System.Collections.Generic; //Подключает дополнительные коллекции

using System.IO; //позволяет работать с чтением и записью в файл

using System.Xml; //позволяет работать с xml файлами

using System.Linq; //позволяет работать с динамическими массивами и т.д.

Переменные

Статус переменных:

 

public //переменная отображается в Inspector. Её можно редактировать из других классов

private //переменная не отображается в Inspector. К ней нет доступа из других классов

Логический тип переменной:

 

bool //может принимать всего 2 значения, true или false

Числовые типы переменных:

 

int //целый числовой тип

float //числовой тип с плавающей запятой(дробные числа)

Текстовые типы переменных:

 

string //текстовый тип переменных, поддерживает только буквенные символы

char //тип переменных поддерживающий символы Unicode

Переменные объектов сцены:

 

GameObject //переменная хранящая объект сцены

Transform //данные об объекте: координаты, угол поворота, размер

Vector2 //хранит 2D позицию, в основном используется для хранения координат и смещения текстур

Vector3 //хранит координаты положения объекта (x, y, z)

Vector4 //четырех-мерные координаты. Используются в сетке касательных или параметрах шейдеров

AnimationClip //переменная клипа анимации

Переменные изображения:

 

GUISkin //переменная скина, в скине хранятся изображения, так же есть настройки шрифта текста

GUIStyle //добавляет в инспектор настройку одного стиля (лучше использовать когда мало стилей, в остальных случаях практичней использовать GUISkin)

GUITexture //переменная изображения (обычная картинка)

Функции

Название функции может быть ЛЮБЫМ. Но только стандартные функции имеют определенные свойства. То есть вашу функцию можно вызвать только вручную а стандартные вызываются при определенных обстоятельствах.
Функции появления и удаления объекта:

 

void Awake () {} //вызывается 1 раз при появлении объекта на сцене

void OnDestroy() {} //вызывается 1 раз при удалении объекта со сцены

Функции старта сцены:

 

void Start () {} //вызывается 1 раз при старте сцены после Awake, если таковой нет, то самой первой

Функции выполняемые на каждый кадр:

 

void Update () {} //вызывается на каждый кадр

void LateUpdate () {} //вызывается на каждый кадр самой последней



void FixedUpdate () {} //вызывается с фиксированной частотой кадров, в основном используется для работы с rigidbody

Функции работы с триггерами:

 

void OnTriggerEnter () {} //вызывается каждый раз при входе объекта в триггер (скрипт должен висеть на триггере)

void OnTriggerExit () {} //вызывается каждый раз при выходе объекта из триггера (скрипт должен висеть на триггере)

void OnTriggerStay () {} //вызывается на каждый кадр пока объект находится в триггере но котором висит данный скрипт

Функции работы с мышью:

 

void OnMouseEnter () {} //вызывается в момент захода мыши на коллайдер объекта

void OnMouseOver () {} //вызывается каждый кадр пока курсор указывает на коллайдер объекта

void OnMouseExit () {} //вызывается в момент выхода мыши с коллайдера объекта

void OnMouseDown () {} //вызывается когда пользователь нажал клавишу в то время как курсор находится над коллайдером

void OnMouseUp () {} //вызывается когда пользователь отпустил кнопку мыши в то время как курсор находится над коллайдером

void OnMouseUpAsButton () {} //вызывается один раз когда мышь выходит с коллайдера с зажатой кнопкой мыши

void OnMouseDrag () {} //вызывается когда пользователь нажал на коллайдер объекта и все еще удерживает кнопку

Активация / деактивация объектов на сцене:

 

void OnEnable () {} //вызывается в момент активации объекта (каждый раз)

void OnDisable () {} //вызывается в момент деактивации объекта (каждый раз)

Функции работы с коллайдерами:

 

void OnCollisionEnter () {} //вызывается 1 раз в момент касания коллайдера на котором висит скрипт другого объекта с коллайдером

void OnCollisionExit () {} //вызывается 1 раз в момент когда коллайдер объекта перестал касаться другого коллайдера

void OnCollisionStay () {} //вызывается на каждый кадр пока коллайдер объекта с этой функцией касается другого коллайдера

Логические элементы:

Запись словом

Математическая запись

Запись на C#

Присвоение

=

=

Сравнение

=

==

И

*

&&

Или

+

||

Нет

*(-1)

!

Не равно

!=

Ввод

С клавиатуры:

 

if (Input.GetKey(KeyCode.Код) {} //Условие выполняется пока зажата кнопка клавиатуры

if (Input.GetKeyDown(KeyCode.Код) {} //Условие выполняется один раз в момент нажатия кнопки клавиатуры

if (Input.GetKeyUp(KeyCode.Код) {} //Условие выполняется один раз в момент отпускания кнопки клавиатуры

*Код — буквенное название кнопки клавиатуры

Пример для кнопки клавиатуры:

 

if (Input.GetKeyUp(KeyCode.W) { код } //Код выполнится один раз в момент отпускания кнопки W на клавиатуре

Мышью:

 

if (Input.GetMouseButton(КОД)) {} //Условие выполняется пока зажата кнопка мыши

if (Input.GetMouseButtonDown(КОД)) {} //Условие выполняется один раз в момент нажатия кнопки мыши

if (Input.GetMouseButtonUp(КОД)) {} //Условие выполняется один раз в момент отпускания кнопки мыши

КОД — код кнопки мыши которую нужно нажать для выполнения условия
0 — левая кнопка мыши
1 — правая кнопка мыши
2 — средняя кнопка мыши

Пример для кнопки мыши:

 

if (Input.GetMouseButtonDown(0)) { код } //при таком условии код в операторных скобках выполнится 1 раз в момент нажатия левой кнопки мыши.

Операторы

Оператор if:

Данный условный оператор имеет 2 вида: полный и не полный. Полный вид отличается тем что он имеет альтернативное условие.

Оператор if:

 

if (Условие) {КОД}

В данном случае КОД выполнится только если условие истинно. Вот эта же запись но на понятном языке:

 

Если (Условие) то выполняем {КОД}

Общий вид полного оператора if:

 

if (Условие) {КОД1}

else {КОД2}

Тут если условие будет истиным то выполнится КОД1 если ложным то КОД2.
Русская расшифровка записи:

 

Если (Условие) то выполняем {КОД1}

Иначе выполняем {КОД2}

Так же можно добавлять несколько условий.

Пример добавления нескольких условий:

 

if (Условие) {КОД1}

else if (Условие) {КОД2}

else if (Условие) {КОД3}

...

else {КОД n}

Но такая конструкция громоздка и в конце концов приведет к тому что вы сами в ней запутаетесь, для множества условий лучше использовать оператор выбора switch

Оператор switch

Этот оператор так же имеет полный и не полный вид
Пример неполного:

 

switch (Переменная)

{

case Значение 1:

КОД1;

break;

case Значение 2:

КОД2;

break;

}

Данный оператор будет по очереди сравнивать значение переменной с предлагаемыми значениями. Если значение переменной совпадет со значением 1 то выполнится КОД1. Если не совпадет ни с чем то нечего не произойдет. Для альтернативных значениях используют полную версию оператора.
Полная версия:

 

switch (Переменная)

{

case Значение 1:

КОД1;

break;

case Значение 2:

КОД2;

break;

default:

КОД3;

break;

}

В данном случае если не одно их значений не подойдет то выполнится КОД3

Связь скриптов

В Unity3d можно воздействовать как на переменные в другом скрипте так и на сам скрипт (вкл/выкл). В любом случае нам нужно сначала получить ссылку на изменяемый скрипт, то есть присвоить его переменной. Затем мы сможем без труда производить любые действия с этим скриптом и его содержимым.
Перейдем к практике:

 

public [название скрипта] [название переменной]; //инициализация переменной

[название переменной скрипта].[название переменной в скрипте] = [значение]; //изменение конкретной переменной

Конкретные примеры:
Допустим нам нужно изменить переменную stats в скрипте car

 

public car st; //мы присвоили переменной st скрипт car, в эту переменную в инспекторе нужно кинуть объект с изменяемым скриптом.

st.stats = 10; //тут мы присвоили переменной stats в скрипте car значение 10

st.stats -= 10; //так можно вычесть из текущего значения переменной 10 (если прибавить то += 10)

st.enabled = false; //так мы отключаем скрипт = true наоборот включит

Важная деталь: изменяемая переменная должна иметь тип public! Иначе нам не дадут к ней обратиться!
Теперь информация для ленивых:
Можно обойтись без создания переменной под скрипт а напрямую обратиться к скрипту, делается это так:

 

GetComponent().stats = 10;

Данная строка хороша для одноразового использования, но не желательна для использования в Update т.к. работает медленнее

Консоль

Синтаксис:

 

Debug.Log(); //Выводит в консоль сообщение серого цвета [обычное]

Debug.LogWarning(); //Выводит в консоль сообщение желтого цвета [предупреждение]

Debug.LogError(); //Выводит в консоль сообщение красного цвета [ошибка]

Синтаксис:

 

Debug.Log("Massage"); //выведет слово Massage в консоль серым цветом

Debug.LogError(a); //выведет в консоль значение переменной красным цветом

Таймер

Создаем 2 переменные типа float:

 

public float Timer; //Время в секундах которое отсчитает таймер

private float TimerDown; //Изменяемая переменная для внутренних операций

В функции Start или Awake пишем:

 

TimerDown = Timer; //Задаем временной переменной значение которое нужно отсчитать

Желательно в функции Update пишем следующий код:

 

if(TimerDown > 0) TimerDown -= Time.deltaTime; //Если время которое нужно отсчитать еще осталось убавляем от него время обновления экрана (в одну секунду будет убавляться полная единица)

if(TimerDown < 0) TimerDown = 0; //Если временная переменная ушла в отрицательное число (все возможно) то приравниваем ее к нулю

Если таймер отсчитал положенное время выполняем действия:

 

if(TimerDown == 0)

{

TimerDown = Timer; //Благодаря этой строке таймер запустится заново после выполнения всех действий в скобках

//Сюда дописываем действия которые произойдут после конца отсчета

}

Полный код:

 

public float Timer; //Время в секундах которое отсчитает таймер

private float TimerDown; //Изменяемая переменная для внутренних операций

 

void Start ()

{

TimerDown = Timer; //Задаем временной переменной значение которое нужно отсчитать

}

 

void Update ()

{

if(TimerDown > 0) TimerDown -= Time.deltaTime; //Если время которое нужно отсчитать еще осталось убавляем от него время обновления экрана (в одну секунду будет убавляться полная единица)

if(TimerDown < 0) TimerDown = 0; //Если временная переменная ушла в отрицательное число (все возможно) то приравниваем ее к нулю

if(TimerDown == 0)

{

TimerDown = Timer; //Благодаря этой строке таймер запустится заново после выполнения всех действий в скобках

//Сюда дописываем действия которые произойдут после конца отсчета

}

}

Курсор

Отображение курсора:

 

Screen.showCursor = false //скрыть курсор

Screen.showCursor = true //показать курсор

Фиксация курсора:

 

Screen.lockCursor = true //заблокировать курсор в центре экрана

Screen.lockCursor = false //разблокировать курсор

Случайные числа

Генерация случайного числа типа float:

 

Random.Range(10.0f); //возвращает случайное число от 0 до 10 включительно

Random.Range(-5.0f, 7.0f); //возвращает случайное число от -5 до 7 включительно

Генерация значения типа bool:

 

float a = Random.value; //переменной a возвратится значение 0.0f или 1.0f (всего 2 варианта) с помощью if или switch можно создать преобразование float в bool

Генерация случайного места положения внутри сферы:

 

transform.position = Random.insideUnitSphere * 10; //после выполнения объект на который воздействуем окажется в случайном месте сферы радиусом 10 и центром в его изначальном месте положения

Генерация случайного места положения внутри круга:

 

Vector2 PositionNew = Random.insideUnitCircle * 7; //возвратит переменной PositionNew случайную сточку в круге с радиусом 7

Генерация случайного места положения на поверхности сферы:

 

transform.position = Random.onUnitSphere * 5; //возвращает случайную точку на поверхности сферы с радиусом 5

Генерация случайного угла поворота:

 

transform.rotation = Random.rotation; //возвратит случайный угол поворота

Интерфейс

Все ниже приведенные методы нужно писать в функции OnGUI, это обязательное условие

Основные методы:

Нарисовать квадрат:

 

GUI.Box(new Rect(x1, y1, x2, y2), "text"); //рисует на экране квадрат в координатах x1 y1 шириной и высотой x2 y2 и пишет на нем "text";

Написание текста:

 

GUI.Label(new Rect(x1, y1, x2, y2), "text"); //пишет текст "text" в координатах x1 y1 в квадрате шириной x2 y2. Текст который не влез в данный квадрат не отображается

Обычная кнопка:

 

if(GUI.Button(new Rect(x1, y1, x2, y2), "text")){КОД} //рисует кнопку в координатах x1 y1 шириной и высотой x2 y2 и пишет на ней "text"; при нажатии на ней мышью исполняется КОД

Кнопка которая активируется пока пользователь удерживает ее:

 

if (GUI.RepeatButton(new Rect(x1, y1, x2, y2), "text")) {КОД} //рисует кнопку в координатах x1 y1 шириной и высотой x2 y2 и пишет на ней "text" при зажатии ее мышью исполняется КОД

Вывод изображения на экран:

 

GUI.DrawTexture(new Rect(x1, y1, x2, y2), texture); //выводит на экран текстуру (texture - переменная типа Texture2D) текстура либо растягивается либо обрезается в соответствии с размерами x2 y2, но не обрезается

Текстовое поле:

 

string stringText = GUI.TextField (new Rect (x1, y1, x2, y2), stringText, numLength); //рисует поле для ввода текста в координатах x1 y1, шириной и высотой x2 y2. Введенный текст присвоится переменной stringText. numLength - максимальное количество символов

Поле для ввода паролей:

 

string passwordText = GUI.PasswordField (new Rect (x1, y1, x2, y2), passwordText, "*"[0], numLength); //рисует поле для ввода текста в координатах x1 y1, шириной и высотой x2 y2. Введенный текст присвоится переменной passwordText. "*" - символ на который будут заменяться все введенные пользователем символы. numLength - максимальное количество символов.

Переключатель:

 

bool toggleBool = GUI.Toggle(new Rect(x1, y1, x2, y2), toggleBool, "Переключатель"); //рисует переключатель в координатах x1 y1. toggleBool возвращает значение переключателя. Рядом с переключателем пишется текст"Переключатель"

Фон для GUI элементов:

 

GUI.backgroundColor = Color.yellow; //Накладывает на все GUI элементы желтый оттенок[Color.yellow] если указать [Color.red] будет красный оттенок

Датчик изменения значений входных данных GUI элементов:

 

if (GUI.changed) Debug.Log("Message"); //Пишет слово "Message" в консоль если хоть один из GUI элементов управления (текстовые поля, кнопки, переключатели и т.д.) изменил значение своих входных данных (нажали на кнопку, дописали символ в текстовое поле и т.д.)

Глобальное изменение тонировки GUI элементов:

 

GUI.color = Color.yellow; //Накладывает желтую тонировку на все GUI элементы в том числе и на текст

Изменение цвета всего GUI текста на сцене:

 

GUI.contentColor = Color.yellow; //Изменяет только цвет всего текста на желтый. На цвет кнопок или фона не влияет.

Raycast

Описание:

Raycast - луч, пуская который из определенной точки и в определенном направлении, можно получать свойства тех объектов в которые он упрется. Например проведя луч из дула пистолета в прямом направлении можно узнать во что попадет пуля, а так же координаты точки столкновения (самая частая реализация стрельбы)

Простейшая конструкция:

 

RaycastHit hit; // переменная возвращающая свойства объекта

Ray ray = new Ray(transform.position, Vector3.up); // инициализируем луч (в скобках начальная точка[тип Vector3] и направление[тип Vector3])

if (Physics.Raycast (ray, out hit, distance)) // проверяем уперся-ли наш луч в объект, если да - возвращает true, нет - false. ray - луч, hit - переменная возвращающая свойства объекта, distance - расстояние на которое пускаем луч[тип float или int]

if(hit.collider.name == "player") // вернет true, если имя объекта в который упрется луч будет "player"

Вот какие еще свойства можно получить из hit:

 

hit.collider // ссылка на коллайдер, из нее получаем имя теги и т.д.

hit.distance // расстояние от начала луча до точки столкновения с объектом

hit.normal // нормаль к поверхности с которой столкнулись

hit.point // координаты точки столкновения

hit.rigidbody // ссылка на компонент rigidbody

hit.textureCoord // uv координаты в точке столкновения

hit.transform // получаем transform объекта с которым столкнулись

hit.triangleIndex // индекс треугольника в который уперлись (используется в процедурной геометрии)

В инспекторе

Эти команды позволяют оформлять переменные в окне инспектора. Многие из этих команд появились только в Unity 4.5, а значит в более ранних версиях доступны не будут. Все команды пишутся прямо над переменной на которую они воздействуют.

Например:

 

[команда]

public int i;

ЗАМЕЧАНИЕ: после этих команд не ставится ";"

Скрыть переменную в инспекторе:

 

[HideInInspector]

 

Написать заголовок над переменной (работает и с русским языком):

 

[Header("Переменные позиции")]

 

Устанавливает диапазон значения переменной (переменная будет отображаться в виде слайдера):

 

[Range(a, b)] // a - минимальное значение, b - максимальное значение

 

Отступ между переменными:

 

[Space(a)] // a - высота отступа в пикселях

Настраиваемое поле ввода текста:

 

[Multiline(a)] // a - высота поля в строках

Улучшенное настраиваемое поле ввода текста:

 

[TextArea(a, b)] // a - высота поля в строках, b - максимальное количество строк если высота a будет превышена (сбоку появится скроллбар)

Подсказка при наведении мыши на переменную (работает и с русским языком):

 

[Tooltip("Подсказка")]

 


Дата добавления: 2015-11-04; просмотров: 1469 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
П: Здравствуйте, один билет до аэропорта, пожалуйста. | United we stand, divided we fall!

mybiblioteka.su - 2015-2024 год. (0.043 сек.)