Главная страница
Случайная страница
КАТЕГОРИИ:
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Оператор 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; //возвратит случайный угол поворота
|
Графические элементы GUI:
Все ниже приведенные методы нужно писать в функции 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, а значит в более ранних версиях доступны не будут. Все команды пишутся прямо над переменной на которую они воздействуют. Например:
ЗАМЕЧАНИЕ: после этих команд не ставится "; " Скрыть переменную в инспекторе:
Написать заголовок над переменной (работает и с русским языком):
| [Header(" Переменные позиции")]
|
Устанавливает диапазон значения переменной (переменная будет отображаться в виде слайдера):
| [Range(a, b)] // a - минимальное значение, b - максимальное значение
|
Отступ между переменными:
| [Space(a)] // a - высота отступа в пикселях
|
| Multiline(a)] // a - высота поля в строках
|
Улучшенное настраиваемое поле ввода текста:
| [TextArea(a, b)] // a - высота поля в строках, b - максимальное количество строк если высота a будет превышена (сбоку появится скроллбар)
|
Подсказка при наведении мыши на переменную (работает и с русским языком):
|