Студопедия

Главная страница Случайная страница

Разделы сайта

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






Оператор 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, а значит в более ранних версиях доступны не будут. Все команды пишутся прямо над переменной на которую они воздействуют.

Например:

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

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

  [HideInInspector]

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

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

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

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

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

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

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

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

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

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





© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.