Создание игры Hidden object с помощью Unity

Это руководство поможет вам создать собственную игру в жанре hidden object с помощью Unity. Уровень подходит для начинающих пользователей Unity.

Игры в жанре поиск предметов пользуются большой популярностью, могут быть основаны на интересной истории или обычной последовательности локаций для поиска.

На изображении ниже показан пример hidden object, с простой графикой. Цель игры — найти все объекты, перечисленные в текстовом поле внизу, и щелкнуть по ним, чтобы их убрать.

Для работы вам понадобится:

  1. Unity: для создания игры.
  2. знание C#.
  3. Материалы для создания локации (скачать здесь).
  4. Графические элементы (скачать).
  5. Звуковые эффекты (скачать).

Если у вас нет Unity. то вы можете загрузить бесплатную персональную версию по ссылке. Также вам потребуется текстовый редактор для работы с исходным кодом. Мы предлагаем использовать Brackets.

Первые шаги

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

Если вы не обладаете художественными навыками, то проще всего использовать возможности Sweet Home 3D для создания графического контента будущей игры.

Создаем пустую комнату и экспортируем ее в качестве PNG файла:

Также вам необходимо экспортировать несколько предметов интерьера, чтобы комната не выглядела пустой, например:

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

Работа с кодом

Запустите Unity и создайте новый проект на вашем диске

Выберите 2D-шаблон:

На вкладке Project ⇒ Assets ⇒ Scenes переименуйте SampleScene в Room1:

На вкладке Project ⇒ Assets создайте 3 новые папки: Backgrounds, Furnitures, Scripts, как показано на изображении ниже.

Добавьте изображение комнаты на вкладку Project ⇒ Assets ⇒ Backgrounds (путем перетаскивания).

То же самое проделайте с мебелью:

Добавьте фон в меню Hierarchy

Нажмите на фоновый объект и в меню Inspector измените значение rder in Layer на -10.

Вам нужно перейти к отрицательным числам, поскольку для текстовых объектов не существует настройки порядка.

Чтобы иметь возможность работать с объектами, которые скрыты, нужно прописать отрицательное значение.

Добавьте предметы мебели и разместите их в нужное место (на свое усмотрение).

Измените параметр Order в настройках слоя для каждого объекта, чтобы установить иерархию в изображении:

Теперь в разделе «Hierarchy» выберите все объекты, которые будут активными.

В Инспекторе нажмите «Добавить компонент» и выберите «Box Collider 2D».

Это добавит область коллайдера вокруг каждого объекта, которая позволит воздействовать на каждый объект с помощью щелчка мышью.

В Box Collider выберите Is Trigger, как показано на изображении ниже.

В данный момент область коллайдера объектов слишком велика и требует правок для каждого из них. Выберите объект (Hierarchy) ⇒ Edit Collider (Inspector) ⇒ измените размер зеленой рамки вокруг объекта.

Теперь вам нужны связанные текстовые объекты. Hierarchy ⇒ Create ⇒ Create Empty:

В конец списка добавляется новый GameObject. Переименуйте его в Blocks_txt.

Inspector⇒ Add Component ⇒ Mesh ⇒ Text Mesh:

Вам также нужно настроить параметры текста. Введите текст для отображения, измените при необходимости шрифт и размер символов.

Установите для Anchor значение Middle Center, как показано на изображении ниже.

Inspector> Transform: поместите текстовый объект в правильное место

Повторите эти действия для каждого объекта,

Теперь перейдем к небольшой части сценария.

В Project ⇒ Scripts создайте сценарий C# (Context menu ⇒ Create ⇒ C# Script) и назовите его ClickControl.

Дважды щелкните его, чтобы войти в редактор и изменить public class на ClickControl.

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

Добавьте код:

public static string obj_name;
public GameObject obj_txt;

void OnMouseDown()
{
//Link the object and the text
obj_name = gameObject.name;
//Debug.Log (obj_name);
//Destroy the object and the text
Destroy (gameObject);
Destroy (obj_txt);
}

Hierarchy ⇒ select all objects. Project ⇒ C# file ⇒ перетащить ⇒ Inspector. Это добавляет сценарий к объектам.

Hierarchy ⇒ выберите объект Blocks.

Hierarchy ⇒ Blocks text ⇒ перетащите Obj_txt в ClickControl (Inspector). Теперь текст связан с объектом.

Свяжите все объекты с текстом и протестируйте результат.

Расширение геймплея

Чтобы игрок не халтурил и не кликал по всей локации, пытаясь «на ощупь» найти загаданные предметы, целесообразно ввести за это штраф.
Вам потребуется новый скрипт C #.

Назовите его ClickTrack.

Добавьте этот скрипт в GameObject и выберете спальню, как показано на изображении ниже:

Добавьте новый GameObject для текстового поля и дочерний GameObject для самого текста:

Добавьте папку Sounds в Assets и добавьте звуковой файл в эту папку.

Замените код ClickTrack следующим содержимым:

public static int TotalClick = 0;
public KeyCode MouseClick;
public AudioClip bcgMusic;
public GameObject myGameObject;

void Start()
{
myGameObject.SetActive(false);
}

void Update()
{
if (Input.GetKeyDown (MouseClick))
{
TotalClick += 1;
}

if (TotalClick >= 5)
{
TotalClick = 0;
AudioSource.PlayClipAtPoint(bcgMusic, transform.position);
StartCoroutine(Wait5Sec());
}
}

IEnumerator Wait5Sec()
{
myGameObject.SetActive(true);
yield return new WaitForSeconds(5.0f);
myGameObject.SetActive(false);
}

В коде, созданном в предыдущей главе (ClickControl), нам нужно повторно инициализировать счетчик при щелчке по объекту. После MouseDown добавьте следующую строку:

ClickTrack.TotalClick = 0;

Теперь вам нужно назначить значения для переменных, определенных в скрипте. В GameObject в разделе Click Track (Script) выполните следующие действия:

установите значение Mouse Click на Mouse 0
перетащите звуковой файл в Bcg Music
перетащите Wait_Box в My Game Object

Анимация объектов

Если объект найден правильно, вы можете воспроизвести небольшую анимацию поверх исяезающего текста.

В иерархии создайте Particle System, как показано на рисунке:

В меню Inspector настройте частицы по своему усмотрению, например, так