-
Вводная часть
Продолжим тему создания простой 2D-игры на Unity 5, и на этот раз добавим возможность случайного размещения кристаллов на игровом поле.
Если вы знакомы с двумя предыдущими материалами, то знаете, что каждый раз при запуске игры кристаллы создаются в определённых местах, в которых мы их разместили на этапе разработки. Это хорошо, но если в нашей игре бесконечное число уровней и мы хотим, чтобы с каждым новым уровнем положение кристаллов менялось, тогда нам нужно немного изменить логику игры, этим сегодня и займемся.
Для начала создадим новый пустой объект Game Controller, который будет контролировать случайное размещение кристаллов на игровом поле. К нему мы привяжем скрипт с этим же названием.

Но с созданием скрипта пока отложим, а сейчас нужно сделать одно серьезное дело. Создадим еще один пустой объект Nodes. Этот объект будет родителем для большого количества дочерних объектов Node, которые будут размещаться в каждой ячейке на игровом поле. Для чего нам это нужно? А нужно нам это для того, чтобы определять координаты каждой ячейки, по расположению на ней объекта Node, и, зная эти координаты, помещать или не помещать в них (случайным образом) кристаллы.
Итак, создадим объекты Node, по одному на ячейку и разместим их, каждый на своем месте. Но одну ячейку мы пропускаем, я думаю, уже понятно какую… ячейку занимаемую тарелкой.
Во вкладке Hierarchy мы получаем следующую структуру:

Теперь, когда все нужные объекты созданы, приступим к созданию программной части.
В папке Scripts вкладки Project создадим новый скрипт и назовем его GameController.

Его содержимое будет следующим:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class GameController : MonoBehaviour {
public GameObject pickup;
public int pickupCount;
public List nodeList = new List();
private GameObject node = null;
void Start () {
SpawnPickups ();
}
void SpawnPickups() {
for (int i = 1; i <= pickupCount; i++) {
node = nodeList[ Random.Range(0,nodeList.Count) ];
Vector3 spawnPosition = node.transform.position;
Quaternion spawnRotation = Quaternion.identity;
Instantiate (pickup, spawnPosition, spawnRotation);
}
}
}
После чего добавим созданный скрипт как компонент для объекта Game Controller. У компонента нужно заполнить 3 поля. Первый – Pickup, в него мы добавляем кристалл Pickup из папки Prefabs. Второй – Pickup Count, это количество кристаллов, которые нужно разместить, для окончания игры, нам их нужно 12. Третий – Node List, это массив пустых объектов Node, которые мы создали ранее. Их нужно все выбрать и перетащить на это поле, чтобы его заполнить, должно получиться так как показано на рисунке:

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