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

З якими проблемами зіткнувся:
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-форумах.