Главная
Регистрация
Вход
Суббота
27.04.2024
17:16
Приветствую Вас Гость | RSS

Сайт учителя информатики  

Тиньковой Елены Николаевны  


Меню сайта

Ученикам

Учителю

Категории раздела
В помощь ученику [8]
Школьные задания [14]
информация [42]
инф

Наш опрос
Оцените мой сайт
Всего ответов: 216

 Unity и Unreal начальный курс 

Unity и Unreal начальный курс

  • Пройти регистрацию на курс
  • Просматриваем материал
  • Отвечаем на вопросы
  • Выполняем задания

Записаться на курс

Пример финальных игр

 

 




Язык C#

картинка со скриптами

Скрипты в Unity

GameObject

GameObject — основа, контейнер, который содержит в себе все компоненты любой объект в Unity3D. Чтобы удалить, к примеру, игровой объект — удалять нужно именно GameObject этого объекта. Для доступа к GameObject — используется переменная, которая присутствует по умолчанию в любом скрипте, унаследованном от MonoBehaviour (то есть в любом скрипте, созданном через Unity3D).

 

Получение ссылки на игровой объект

 

1

2

var myGo = gameObject; // мы получили ссылку на GameObject объекта

// однако возможно использовать напрямую через gameObject

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

 

Уничтожение игрового объекта

 

1

Destroy(gameObject); // уничтожает данный объект со сцены

Данным способом можно удалить игровой объект.

 

Активация/деактивация игрового объекта

 

1

2

gameObject.SetActive(false); // выключает данный объект (и все его дочерние)

gameObject.SetActive(true); // включает данный объект (и все его дочерние)

Деактивация объекта аналогична снятия галочки инспекторе Unity3D, которая обведена красным цветом на скриншоте ниже.

ul0_setActiveFalse

Деактивация элемента деактивирует также все его дочерние объекты и останавливает выполнение в их скриптов.

 

Добавление новых компонентов и скриптов игровому объекту

 

1

2

gameObject.AddComponent<BoxCollider>(); // добавляет к данному объекту компонент BoxCollider

gameObject.AddComponent<Listener>(); // добавляет к данному объекту скрипт Listener

Таким образом можно добавить абсолютно любой компонент, либо скрипт, который можно добавить в редакторе Unity3D.

 

Получение доступа к компоненту игрового объекта

 

1

var objectBoxCollider = gameObject.GetComponent<BoxCollider>(); // получение ссылки на компонент BoxCollider

Таким же образом можно получить доступ к любому компоненту игрового объекта.

 

Переименование игрового объекта. Считывание имени объекта

 

1

2

gameObject.name = "ObjectNewName"; // меняем имя объекта

var objectName = gameObject.name; // считываем имя объекта

 

Сделать объект статичным

 

1

2

gameObject.isStatic = true; // делаем объект статичным

var isObjectStatic = gameObject.isStatic; // считываем - является ли объект статичным

Данный код аналогичен установке/снятию галочки в редакторе Unity3D (на скрине ниже).

ul0_setStatic

 

Установить слои игровому объекту, а также считать их

 

1

2

gameObject.layer = LayerMask.GetMask(new[] {"Environment", "Tree"}); // устанавливает слой

var objectLayer = gameObject.layer; // получает числовое представление слоев, к которым относится объект

 

Установить тэг игровому объекту, а также его считывание

 

1

2

gameObject.tag = "newTag"; // устанавливает тэг объекту

var objectTag = gameObject.tag; // считывает тэг объект

 

Transform

С трансформом всё немного проще — этот компонент не является основой, но тем не менее — является основной и, главное, неотъемлемой частью GameObject’а. Он отвечает за месторасположение объекта на сцене, его «вращении», размерах, а также содержит информацию о дочерних и родительском объектах.

Это единственные компонент, который невозможно удалить из GameObject.

 

Изменение положение объекта

За положение объекта на сцене отвечает элементы transform.position и transform.localPosition.

Они оба являются переменной типа Vector3 и имеют в себе 3 главных составляющих x,y и z, которые соответствуют координатам в трехмерном пространстве. Следует учитывать, что xy и z невозможно менять напрямую — они только для чтения. Чтобы добавить единичку к — нужно добавить к самому transform.position новый Vector3, который равен (1,0,0), что добавить к x единицу, а к и z — нули.

Чем же отличаются transform.position и transform.localPosition?

Их главное (и единственное отличие) заключается в том, что position — показывает и принимает координаты объекта, относительно мировых координат, а localPosition — относительно родительского объекта. Если же игровой объект является «корневым», то есть у него нет родительских объектов, то position и localPosition будут равны.

 

Движение объекта

Сначала рассмотрим элементарные варианты.

Как мы уже говорили — position (буду далее использовать именно его, так как отличия от localPosition только в том, относительно чего эти координаты) является переменной типа Vector3. Поэтому для его изменения нужно либо прибавить к нему другой вектор, либо вычесть другой вектор, либо заменить его другим вектором.

1

2

3

transform.position += new Vector3(1,0,0); // добавляем к X единицу

transform.position -= new Vector3(1,1,0); // вычитаем из X и Y единицу

transform.position = new Vector3(10,20,30); // устанавливаем объекту координаты 10,20,30 (x,y,z)

Рекомендуется использовать функцию transform.Translate. 

Это уже не переменная, как transform.position — это функция. У неё есть два входящих параметра:

  1. Vector3, который отвечает за то, в каком направлении будет двигаться объект;
  2. Space.Self/Space.World — то, относительно чего будет двигаться игровой объект. Space.Self — аналогичен transform.localPosition, а Space.World — аналогичен transform.position.

 

Вращение объекта

За вращение объекта отвечает компонент transform.rotation, transform.localRotation и функция transform.Rotate.

Здесь все аналогично transform.position. Кроме одного, несмотря на то, что в редакторе Unity3D Rotation представляет собой Vector3, то есть вращение относительно оси X, оси Y, оси Z.  Но в коде оно представлено в виде кватернионов. Что такое кватернион — отдельная история. И обычно её изучают в вузах. По факту — знание кватернионов не обязательно для разработки игр. К счастью разработчики Unity3D это понимают и сделали две удобные для программистов вещи:

  1. Функция transform.Rotate(Vector3 vectorSpace.World(либо Self));
  2. Функция Quaternion.Euler(float x,float y,float z), которая как раз возвращает кватернион;

Меньше слов — больше кода:

1

2

var myRotation = Quaternion.Euler(1, 1, 1); //поворачиваем объект по всем трем осям на единицу за такт

transform.rotation *= myRotation; // обращаем внимание, что кватернионы не складывают, а умножают. Делить их нельзя. Поэтому для вычета просто делаем значения вектора отрицательными

Вместо rotation можно применять localRotation, аналогично position.

1

transform.Rotate(new Vector3(1,0,0),Space.Self); // либо Space.World

Такой подход аналогичен transform.Translate и также является более производительным.

 

Поиск других объектов на сцене

Есть два подхода поиска объекта на сцене.

  1. GameObject.Find(«имяОбъекта»); Он же «пушка по воробьям». Несмотря на кажущуюся скорость — метод является достаточно прожорливым и при частом использовании на большой сцене может стать большой проблемой. Однако он же самый простой способ (хотя и ненадежный). А ненадежный он потому, что редактор Unity3D позволяет давать одинаковые имена объектам. А GameObject.Find возвращает только один элемент, который он найдет первым.
  2. transform.FindChild(«имяДочернегоОбъекта») — функция возвращает переменную типа transform нужного объекта. Для доступа к GameObject этого объекта особых усилий прилагать не нужно, так как ссылка на него уже содержится в transform (как и ссылка на transform содержится в GameObject’е).

 

1

2

3

var childTransform = transform.FindChild("myChild1");

var childGameObject = childTransform.gameObject;

var anotherTransformLink = childGameObject.transform;

 

Также можно запрашивать дочерние элементы по их номеру:

1

2

3

4

5

var childCount = transform.childCount;

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

{

   Debug.Log(transform.GetChild(i).name);

}

 

Также дочерний элемент может запросить родительский, а также родительский родительского и так далее:

1

2

var myParent = transform.parent;

var rootObject = transform.parent.parent.parent;


Вход на сайт

Портфолио

Кабинет

Достижения

Поиск

Календарь
«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930

Друзья сайта

Бахмутова Е.Н.

Киреева Т.В.

Вахрамеева Л.Н.

Карабухина Н.П.

Тинькова Е.Н.

Горелова В.А.


Сайт существует

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Всего на сайте
Total users: 425

Copyright MyCorp © 2024
Конструктор сайтов - uCoz