EnemyMove — движение объекта по траектории

Печать

Скрипт движения объекта по траектории заданной положением других объектов. Может применяться для движения врагов, платформ или других игровых объектов.

Настройка скрипта:

 

результат работы скрипта:

 

исходный код скрипта:

using UnityEngine;
using System.Collections;

public class EnemyMove : MonoBehaviour 
{
  [SerializeField] private float moveSpeed = 5f;	// скорость движения
  [SerializeField] private GameObject[] myWaypoints;	// список точек по которым будет двигаться енеми
  
  private int myWaypointId = 0;		                // текущая точка в массиве куда двигаться
  
  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  void EnemyMovement() 
  {
    // если точки есть
    if(myWaypoints.Length != 0) 
    {
      // если мы уже достигли назначенной точки, то переходим к следующей
      if(Vector3.Distance(myWaypoints[myWaypointId].transform.position, transform.position) <= 0) 
      {
        myWaypointId++;
      }
      
      //если точки исчерпаны то переходим к началу массива точек
      if(myWaypointId >= myWaypoints.Length) 
      {
        myWaypointId = 0;
      }
      
      //движемся в назначенную точку
      // move towards waypoint
      transform.position = Vector3.MoveTowards(transform.position, myWaypoints[myWaypointId].transform.position, moveSpeed * Time.deltaTime);
    }
  }
  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  // Update is called once per frame
  void Update () 
  {
    EnemyMovement();
  }
}