AR в Unity: Магічна Коробка — Частина 1

Раніше ми підготували наш проєкт і розмістили необхідні активи для додатка. Крім того, ми визначили бажаний результат проєкту та спланували, як код гармонійно поєднається, щоб реалізувати наше бачення.

Першим кроком є створення Box Manager. Відповідно до нашого планування коду, Box Manager був центральною частиною нашого проєкту, тому це гарне місце для початку. Давайте створимо новий скрипт, який буде прикріплений до коробки в нашій сцені, і назвіть його “Box Manager”.

Скрипт Box Manager буде працювати, використовуючи рядки, які містять правильний порядок кольорів. Почнемо писати код у нашому скрипті, і першим кроком буде створення кількох змінних типу string. Ми створимо змінну для правильного порядку кольорів дорогоцінних каменів, яка міститиме рішення. Інша змінна — введений порядок кольорів, що за замовчуванням буде порожньою.

pic

До коробки прикріплена анімація, яка відкриває її. Коли рішення введено правильно, коробка відкривається. Тому створимо змінну типу Animator, щоб мати змогу доступитися до анімації та відтворити її у потрібний момент.

pic

Далі нам потрібно знати кількість дорогоцінних каменів у додатку. У моєму проєкті їх буде три, тому ми встановимо відповідну змінну в значення 3. Крім того, нам потрібно буде знати поточний камінь, значення якого збільшуватиметься щоразу, коли ми додаємо колір до наших рядкових змінних.

pic

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

Перший метод, який нам потрібен, буде публічним і відповідатиме за вибір дорогоцінного каменя. Щоразу, коли вибирається камінь, ми хочемо додати його колір до введеного порядку кольорів. Також ми збільшуватимемо значення змінної поточного каменя. Нарешті, порівняємо наш вибір з правильним порядком кольорів.

Це порівняння буде виконуватися в окремому методі, тому давайте створимо ще один метод для цієї функції. На цьому етапі ми повинні мати два порожні методи.

pic

Тепер, коли основа Box Manager створена, давайте створимо новий скрипт для дорогоцінних каменів. У цьому скрипті нам наразі потрібна лише публічна змінна типу string, яка визначатиме назву кольору каменя. Поки що залишимо цю змінну порожньою, оскільки кожен камінь матиме унікальну назву кольору.

pic

Повертаємося до скрипта Box Manager і додаємо параметр до методу Gem Select, щоб передати інформацію про вибраний камінь до Box Manager. Після цього додаємо назву кольору з відповідного скрипта до введеного порядку кольорів.

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

pic

Давайте продовжимо працювати над наступним методом, який ми створили раніше. У цьому методі ми будемо порівнювати рядки: якщо вони збігаються, коробка відкриється; якщо ні, то порядок буде скинуто.

pic

Створимо нові методи, які визначатимуть, що станеться в умовах оператора if/else, який ми створили. Якщо послідовність успішна, коробка відкриється.
Якщо послідовність не є успішною, дорогоцінні камені будуть скинуті.

pic

Напишемо метод OpenBox(), який виконується, коли користувач успішно завершує послідовність. У цьому випадку ми хочемо відтворити анімацію, яка відкриє коробку та покаже приз усередині. Відповідно до Animator Controller, кришка коробки налаштована як тригер, і ім’я параметра – “Open”.

pic

Щоб запустити анімацію в методі OpenBox(), нам достатньо викликати параметр тригера Set Trigger.

pic

Після створення методу OpenBox(), перейдемо до методу ResetGame(). Коли послідовність рядків введена неправильно, ми хочемо скинути значення поточного каменя на нуль. Крім того, необхідно скинути поточний порядок кольорів дорогоцінних каменів і встановити рядок у порожній стан, як це передбачено за замовчуванням.

pic

На цьому етапі Box Manager готовий. У майбутньому ми повертатимемося до нього для невеликих змін, але зараз він виглядає чудово.

До зустрічі наступного разу!

Перекладено з: AR in Unity-Magic Box: Part 1

Leave a Reply

Your email address will not be published. Required fields are marked *