You are on page 1of 10

Зміна координат об'єктів (Вектори), gameObject

Vector3 – для трьох координатт x, y, z

Vector2 – для двох(а по факту для 3, але z = 0) x, y

new Vector3 = Vector3.zero

Щоб мені змінювати координати об’єктів в юніті мені потрібно взяти координати

GetComponent<>() – важкий метод тому його використовувати у Update дуже погано, зазвичай
його використовують саме у методі Start що не сильно напружує систему. Але використовувати
GetComponent у блоці Update максимально погано

gameObject – є за замовчуванням, ця функція звертається до свого батька(об’єкту) і бере з нього


данні(як base у класах) тому не обов’язково його кликати(не враховуючи деякі функції)

Коли ми змінюємо одночасно всі координати то ми можемо використовувати специфічний


синтаксис

Vector3.one – це вектор з (1, 1, 1)

[SerializeField] та інші атрибути


Щоб редагувати/задавати значення змінних в юніті ми додаємо у скрипті public або
private(наприклад). Але в межах одного класу звичайно ми пишемо private із-за чого доступу в
юніті до змінної ми мати не будемо, саме тому ми перед private пишемо команду(атрибут)
[SerializeField] щоб мати доступ до змінної всередині юніті

Також для публічних ми можемо атрибут аби заховати можливість задави їй значення в інспекторі:

Для того щоб відокремити декілька полів в групи використовують [Space]

Також можна ввести число, відстань між полями

Ще одним корисним є хедер, який підписує групу полів

Ще можна додати слайдер до змінних. Для цього пишемо:


Інші корисні атрибути

Prefab
Prefab – це шаблон або макет (наприклад деяка модель дерева з примітивів). Він окремо
створюється і позначається синім кубом(при його редагуванні сцена стане синьою)

Terrain
Terrain – це площина (або просто ділянка) яку можна редагувати та розширювати. Для цього
існують кнопки в редагуванні терейну.

1) Кнопка дає змогу додавати на краях площини ще одну площину.


2) Кнопка редагування, дозволяє виконувати дії з обраної функції, наприклад підіймаючи або
опускаючи терейн, малювання текстури(землі чи іншого).
3) Насаджування дерев (потрібно буде загрузити модель обраного дерева).
4) Насадження трави.

Instantiate, Destroy, Quaternion


Команда Instantiate(); створює заданий об’єкт(як 1 параметр) на задану позицію(2 параметр) та на
заданий напрямок(3 параметр, кватерніона).

Quaternion.identity – задає напрямок такий же, який і у батьківського об’єкту (в нас це префаб)

Щоб знищувати створені об’єкти потрібно використовувати функцію Destroy(), причому одна з
перегрузок також приймає і час, після якого слід видалити заданий об’єкт.

Input(клавіши)
На відміну від консолі у юніті за натискання клавіш відповідає клас Input та його вбудовані функції

Клавіши задаються стандартно, клавішами альфа позначаються верхні цифри, нумпад


позначається окремо

Collision/Collider, Rigidbody, тригер, tag


Hitbox – це куб від колайдеру.
Існує багато колайдерів, як 3д так і 2д. Стандартними(примітивними) є куб, сфера та капсула.

При натисканні Edit Collider ми включаємо редагування колайдеру. На модельці, колайдер стає
світло-зеленим і на ньому з’являються маленькі квадратики(ключові точки), за які ми можемо
тягнути та змінювати розмір та форму колайдеру

Mesh Collider – це колайдер який повторює форму об’єкту (описує сітку взаємодії навколо меша
(об’єкта зі складною формою))

ПРОТЕ меш колайдер жире доволі багато ресурсів.

Rigidbody

Компонент додаючий фізику об’єкту. Співпрацює з колізією, тобто умовно куб падає на терейн і з
колізією він бачить що впав на терейн та зупиняється на терейні, без колізії він продовжить падати
в пустоту

В юніті, в скриптах Rigidbody у вигляді поля чи змінної скорочено називається


rb. І зазвичай його задають у блоці Start()

Trigger

Кожен об’єкт з колайдером може стати тригером

Важливо що при включеному тригері фізика (Rigidbody) працювати не буде, адже тригер виключає
всі інші колізії, окрім себе(бо він тригерний), також виключяться й інші скрипти(колізія). Тому якщо
нам потрібна фізика то ставимо Rigidbody, якщо тригер зона(для активації чогось в зоні) вмикаємо
галочку що це тригер і прибираємо Rigidbody, якщо ж ми перевіряємо зіткнення колізій, то
вимикаємо і фізику, і тригер.

Метод OnTriggerEnter() спрацьовує коли через об’єкт із цим скриптом проходить якийсь об’єкт, в
даному випадку назву цього об’єкту що проходить виводить у консоль.

ВАЖЛИВО: Може бути лише один унікальний скрипт на об’єкт, два однакових бути не може.

Опрацьовується кожен кадр, якщо об’єкт знаходиться в тригері(стоїть)

Опрацьовується лише коли об’єкт ВИХОДИТЬ з тригеру

COLLISION

Опрацьовує КОЛІЗІЮ об’єктів, тобто працює коли колізії об’єктів торкаються один одного.

Такі самі команди Exit, Stay також є і працюють відповідно.

TAG

Тегами ми поділяємо об’єкти на різні групи і ми можемо керувати цими тегами у скриптах

GetAxis, AddForce, LookAt


AddForce

Rigidbody надає нам фізику на об’єкт і щоб керувати самим об’єктом ми можемо надавати йому
силу за допомогою функції AddForce (можна порівняти з ударом)
Якщо ми надаємо швидкість об’єкту, через transform це буде впливати на сам об’єкт і, наприклад
стрибок буде локальним, тобто якщо наш об’єкт знаходиться під нахилом то він буде стрибати у
тому ж напрямку.

В цьому ж випадку ми використовуємо Vector3.up(він має 0, 1, 0), тобто тут використовується


глобальний стрибок, в цьому випадку якщо наш об’єкт буде під нахилом то він все одно полетить
вертикально вгору.

GetAxis

Щоб зчитувати натискання клавіш ми можемо використовувати функцію


Input.GetKeyDown(KeyCode.клавіша) що зчитує саму клавішу, що не завжди зручно. Для таких
випадків використовується GetAxis, яка зчитує натискання клавіш(це може бути як
горизонтальні(“Horizontal”), вертикальні(“Vertical”), колесо миши(“MouseWheel”), “Mouse X”,
“Mouse Y”) і так, клавіши задаються через string, проте ця функція також зчитує натискання, як WS,
AD, так і стрілок.

Значення у таких випадках будуть або – або + (дивлячись на натиснуту клавішу, тобто умовно A
буде - , а D буде +)

LookAt

Функція повертає об’єкт в сторону обраного об’єкту

Player Controller(управління, стрибок, камера, курсор)


Тут буде описано, як зробити керування гравцю (від найлегшого але погано до найкращого)

треба заблокувати xyz

Все що наведено зверху є загальним.

1)
2)
Неочевидна річь, але ми можемо складувати вектори однією функцією
Також най не потрібно зчитувати фізику гравця коли ми нічого не натискаємо, адже це
просто не потрібно.

3)

ВАЖЛИВО! Якщо потрібно і хочеться зробити параметр sensitivity(сенса) то у рядку з rotX та


rotY просто потрібно додатково перемножити на sensitivity.
Цей варіант працює значно оптимізованіше, проте тут rb.drag задаються що може бути
проблемою, також тут варто враховувати координати(особливо rotX, rotY), наприклад у
коді по Х працює правильно, але по Y потрібно інвертувати вісь. Також камера в цьому
прикладі може рухатись на всі 360 по вертикалі. Також поле sensitivity є зайвим і не
використовується.
Invoke, InvokeRepeating, IEnumerator
Метод Invoke та InvokeRepeating потрібні для повторення якогось заданого методу(без параметрів)
через деякий проміжок часу. ВАЖЛИВО що Invoke просто запускає скрипт через якийсь проміжок
часу.

Цей метод приймає назву методу, як string параметр та проміжок часу, ЧЕРЕЗ який буде
активовано скрипт.

InvokeRepeating

Це такий же самий метод, але він на відміну від попереднього запускається циклічно.

У нього 1 параметром задається string назва методу, другим затримка перед активацією і третім
інтервал між повторним викликом

Визивати функцію “GenerateTree” після 5 секунд, кожні 1 секунду.

IEnumerator

Invoke та InvokeRepeating приймають в себе назву функції і параметри задати неможливо. Саме
для таких випадків і існує IEnumerator. Це також метод який дозволяє нам робити затримку, проте
відмінність полягає як у складності написання так і у тому що IEnumerator не є циклічним, для
цього вже потрібно використовувати рекурсію.

Спочатку пишемо в методі(який має мати затримку)

В свою чергу щоб кликати цей метод потрібно використати ще один метод

Доступ до змінних в інших скриптах


У скрипті в якому ми будемо мати змінну(поле), яку потрібно змінювати через інші
скрипти(наприклад магазин) потрібно(декілька варіантів):

1) Поганий варіант:

2) Через публічне поле, тобто зробити поле до якого ми хочемо мати доступ публічним
Або щоб приховати саме поле в інспекторі(юніті)

3) Через окрему функцію(найлегший варіант):

Саме поле залишається приватним.

В цьому випадку ми будемо читати значення окремою функцію, тобто ми просто покличемо
цю функцію в іншому скрипті

Далі просто в потрібному скрипті(наприклад скрипт магазин) ми визиваємо скрипт, к якому ми


хочемо отримати доступ

RayCast
Для відправки лучів ми використовуємо клас фізики та такий код:

Ми випускаємо луч від позиції нашої камери, у сторону вперед, і точку зіткнення ми записуємо у
RayCast hit. Доречі, можна дописати ще один аргумент, а саме дистанцію.

Ця точка має координати зіткнення, які ми використовуємо щоб телепортувати гравця на нове
місце. Проте потрібно пам'ятати про те що центральна точка нашого гравця знаходиться в центрі
об'єкту, тому нам потрібно це враховувати і припіднімати об'єкт.

ВАЖЛИВО! Іноді луч може вилітати від гравця, тому для вирішення цієї проблеми потрібно задати
гравцю слой, що він буде ігнорувати рейкастінг(там де теги)

Спавн з урахуванням нерівностей


Щоб спавнити, наприклад дерева з урахуванням нерівностей терейну нам допоможе функція
SampleHeight
UI (user interface), UX, layout(компонент)
UI це окреме полотно(Canvas) в якому в нас зберігаються та відображаються UI елементи

Основними з яких є text, image, button. Вже похідними від них є Slider(повзунок),
DropDown(відкривше меню), Toggle(галочка).

просто змінити на scale

UX – user experience

1) Як виводити інформацію(завжди її варто робити в місці де це опрацьовується, адже так ми


економимо пам’ять)

В цьому випадку класс Text це покликання на стару версію legacy text. Тому нам потрібно
прописати таке жахіття

- зміна тексту.

Layout

Цей компонент групує елементи і робить між ними рівні відступи(створює пустий об’єкт, додаємо
цей компонент і тепер всі об’єкти в групі будуть рівноввідалені)
Зупинка часу на кнопку

Вихід з гри, запуск рівня(інших сцен)


Вихід

Щоб виходити з гри, нам в першу чергу потрібно зробити меню та кнопку, потім створити скрип де
зробити функцію, в якій використати Application.Quit();

Play

Щоб запускати гру, інші рівні, повертатись у меню нам потрібно перш за все створити окремі сцени
для самої гри(рівня) та меню. Це робиться в File > Build settings. Перетягуємо сцени у поле зверху, і
ми побачимо справа індекси сцен. Функція, за допомогою якої ми будемо змінювати рівні(сцени)
приймає, або назву сцени, або назву сцени.

You might also like