Своя Tower Defense на Unity 5. Часть 1.

Своя Tower Defense на Unity 5. Часть 1.

Создание Tower Defense на игровом движке Unity 5.

Начиная с этого урока я буду рассказывать вам, как создать свою игру в стиле Tower Defense на игровом движке Unity 5.

Tower Defense – это жанр игры, в котором игроку необходимо расправится с врагами (ботами), до того как они пересекут определенную точку на карте. Делать это необходимо с помощью строительства башен в определенных местах на карте.

В этом уроке мы подготовим игровую сцену и реализуем движение ботов по определенным точкам (поинтам).

Начнем с подготовки сцены. Создадим новый проект в Unity и добавим несколько новых папок material, resources, scripts и scene. В этих папках мы будем хранить материалы, игровые объекты, скрипты и нашу игровую сцену.

assets

Создание поля.

Для начала нам необходимо создать игровое поле, где будут проходить все основные действия.

Добавим плоскость на сцену с позициями по нулям и любым материалом, переименуем ее в pole.

pole

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

Добавим куб на сцену с размерами 1, 0.1, 1 и отключим у него возможность отбрасывания теней (Mesh render — Cast Shadows — off).

place

Переименуем куб в TowerPlace и сохраним его в префаб

Теперь продублируем нашу платформу (ctr+D) так, что бы они покрывали все игровое поле

towerplacescene

Переместим все платформы в пустышку (TowerPlace) и у префаба изменим немного размеры для того, что бы было расстояние между платформами.

towerplacescene2

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

towerplacescene3

Добавление Waypoints

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

waypoint

Сохраним его в префаб и разместим наши вайпоинты на пустой дорожке, на краях поворота (дублировать CTR+D, перемещать с зажатой клавишей CTR). Перенесем все поинты в пустой объект weapoints.

waypoint2

Spawner

Создадим куб, который будет создавать ботов на сцене. Ставим его в начало пути ботов и убираем у него box collider, назовем его Start

Продублируем этот куб и разместим его в конце пути ботов (можно применить на кубы разные материалы), назовем его End.

startend

Противник

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

enemy

Скрипты

На этом подготовка сцены закончена, переходим к скриптам.

В папке Scripts создайте новый c# скрипт spawner и переместите его на объект Start. Откройте скрипт и напишите такой код:

using UnityEngine;

using System.Collections;

 
public class spawner : MonoBehaviour

{
 public Transform EnemyOrefab;//образец объекта для клонирования
 public Transform spawnPoint;
 public float timeBetweerWaves = 5f;// время через которое произойдет создание нового объекта
 private float countdown = 3f;
 private int waveIndex = 0;
 void Update()
 {
  if (countdown <= 0f) {
  StartCoroutine(SpawnWave());
  countdown = timeBetweerWaves;
  }
 countdown -= Time.deltaTime;// с каждым кадром переменная будет уменьшатся
 }
 IEnumerator SpawnWave(){
 waveIndex++;
 for (int i = 0; i < 10; i++) { // после каждого появления объекта к нему будет добавляться еще один объект
 i = Random.Range(1, 10);
 SpawnEnemy ();
 yield return new WaitForSeconds (0.3f); // через определенное время
 }
}

void SpawnEnemy () {
 Instantiate (EnemyOrefab, spawnPoint.position, spawnPoint. rotation); // создание объекта на сцене
 }
}

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

Создадим скрипт Enemy и перенесем его на префаб противника (Enemy), откроем его и напишем такой код:

using UnityEngine;
using System.Collections;

public class Enemy : MonoBehaviour {

 public float speed = 10f; //скорость движения
 private Transform target;
 private int wavepointIndex =0;

 void Start (){
  target = weapoints.points [0]; // указываем наш массив с поинтами
 }

 void Update(){
  Vector3 dir = target.position - transform.position; // движение объекта к каждому поинту
  transform.Translate (dir.normalized * speed * Time.deltaTime, Space.World);
  if (Vector3.Distance (transform.position, target.position) <= 0.3f) { // если дистанция до точки меньше 0.3
  GetNextWaypoint ();
  }
 }
 void GetNextWaypoint () {
 if (wavepointIndex >= weapoints.points.Length - 1) { // и если значение точки меньше значения точки из скрипта weapoints (который мы создадим позже)
  Destroy (gameObject); // то удаляем объект
  return; // делаем повтор
  }
 wavepointIndex++;
 target = weapoints.points [wavepointIndex];
  }
 }

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

На объекте Start укажем в поле spawn object наш префаб Enemy и в поле Spawn point укажем сам Start

startscript

Создадим еще один скрипт  и назовем его weapoints, перенесем его сразу на объект weapons на сцене (группа наших поинтов). Откроем скрипт и напишем код:

 using UnityEngine;
 using System.Collections;

  public class weapoints : MonoBehaviour {

  public static Transform[] points; // здесь просто указывается массив с нашими точками

 void Awake(){
  points = new Transform[transform.childCount];
  for (int i = 0; i < points.Length; i++) {
  points[i]= transform.GetChild (i);
  }
 }
}

На этом этапе уже можно запустить нашу сцену, не забудьте перед этим добавить сцену в настройки проекта File — Built settings и сохранить сцену.

built

Так же, настройте камеру как вам удобно для просмотра сцены

camera

Запустите проект

logo

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

Предыдущий урок              На главную          Следующий урок

Обсудить на форуме


Оставить Комментарий