Перший проект

Це – мій перший проект на Unity.

Проста 2D-гра. "Бики та корови". Створена за мотивами відомої студентської гри: два чуваки сідають один навпроти одного, загадують чотиризначне число (всі цифри різні). Завдання - вгадати число у супротивника. На перший погляд здається складно, але в 6 ходів можна вкластися. Мозок тренується – будь здоровий як.

AddType application

З якими проблемами зіткнувся:

1. Як передати дані між сценами?

Робиться додатковий клас, вішаємо його на якийсь Empty Object на нульовій сцені (зазвичай це меню). АЛЕ! Якщо цим і обмежитися, при кожному завантаженні цієї нульової сцени (гравець перестав грати, вийшов у меню) - отримаємо дубль об'єкта. Скільки разів гравець заходитиме у нульову сцену – стільки разів і отримаємо дубль.

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

using UnityEngine; використовуючи System.Collections; public class Settings : MonoBehaviour public static Settings instance; public static bool sound; public static bool hint; // Use this for initialization void Start() sound = true; hint = true; > void Awake() if (!instance) instance = this; DontDestroyOnLoad(transform.gameObject); > else Destroy(gameObject); > > >

2. Анімація в меню: як завантажити наступну панель, щоб все відпрацювало правильно: анімація закриття поточної панелі, і анімація відкриття наступної?

Зробив через код. Для кожного вікна є свій скрипт і там є прапор, який виставляємо перед викликом наступної панелі в true. Для сцени є глобальний скрипт і в методіUpdate ми перевіряємо всі панелі: яка закривається? При цьому запускаємо корутину, робимо затримку в 0.7 секунди, і тільки тоді активізуємо наступну панель.

3. Як отримати у об'єкта компонент Animator.

Ціла епопея з цим аніматором. Довелося робити скрипт для об'єкта, заносити в нього поле типу Animator, а потім із цього скрипту отримувати.

4. Як у UI Toggle поміняти картинки?

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

5. Як отримати неактивну панель (об'єкт)?

Вони є в дереві, але важко достукатися до них. Ось така конструкція допомагає:

GameObject.Find("Canvas").transform.Find("Наш об'єкт").transform.gameObject;

6. Замість масиву часто НАБАГАТО зручніше використовувати колекції. Це дуже зручний механізм. І наочніше, і геморою менше з індексами.

7. Під час розробки все було просто чудово, але при білді зникли всі українські літери. Коми там залишилися. двокрапки. А національні символи зникли. Виявилося, що стандартний шрифт Юніті у білд не підтягує. Довелося покласти в Асети шрифт (взяв із системної папки зі шрифтами) і всі текстові елементи на Сцені перебити на цей шрифт.

8. Усі .PSD-файли (графіка Фотошопа) зробив PNG-шними (я б їх у JPG конфертнув, але він не підтримує прозорість). Цим заощадив мегабайти чотири у підсумковому білді. Тобто. зробив завантаження у 2 рази легше.

9. Насамперед я вирішив викласти гру на свій сайт (взагалі її треба десь зберігати, щоб на сторінці викласти посилання). На тестових пусках все працювало добре, але після заливання на сайт гра почала валитися з помилкою

Тут річ у наступному: коли ми білдімо Unity-проект під WebGL (Unity Player деприкейтед), вона намробить кілька архівів (з розширеннями .datagz, .jsgz, .memgz). Але сервер сайту з ними працювати не вміє. Потрібно підкоригувати .htaccess-файл. Додати туди:

AddType application/octet-stream .data AddType application/octet-stream .mem AddType application/octet-stream .unity3d AddType application/octet-stream .datagz AddType application/octet-stream .memgz AddType application/octet-stream .jsgz AddType application/octet-stream .unity3dgz

Так мені зробили. Самі розробники Юніті радять додати файлweb.config у папку з грою (у мене таке не спрацювало):

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

З іншого боку, Юнька все одно безкоштовна (на халяву і хлорка - сирок), та й все одно мало хто на ній з інді-розробників робить ігри під Веб (тільки якщо в навчальних цілях. А так - всі під Андроїд клепають).

10. Якби я не мав цього сайту, довелося б шукати інше місце. Раніше народ використовував для таких цілейGoogle Drive, але там прикрили цю лавочку нещодавно. Є ще сайти начебтоitch.io, і я обов'язково спробую його з одним із наступних проектів. Ну іgithub деякі радять.

Сам проект просто поклав на сайт. Створив папку та залив у неї. Також довелося трохи підкоригувати index.html і style.css, які Unity збилдила автоматично, під цю CMS-ку (прописав шляхи), і довелося в TemplateData/UnityProgress.js прописати шляхи на картинки з лого, прогрессбаром і фуллбаром.

Загалом все вирішується.

Тільки часу доведеться більше провести на Unity-форумах.