using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyFollowPath : MonoBehaviour //для передвижения врага по заданному пути с возможностью выбора видов врага { public enum MovementType //типы передвижения { Walking, Flying, Jumping } public MovementType Type = MovementType.Walking; //вид движения public EnemyPatrolling MyPath; //используемый путь public float MaxDistance = .1f; //максимальная дистанция подхода к точке private WalkingEnemyMoving walkingEnemy; //для обращения к скрипту задающему движение врагу public IEnumerator pointInPath; //проверка точек void Start() { if(MyPath == null) //проверяет прикрепили ли путь { return; } pointInPath = MyPath.GetNextPathPoint(); pointInPath.MoveNext(); //получение следующей точки в пути if(pointInPath.Current == null) //есть ли точки к которой передвигаться { return; } transform.position = pointInPath.Current.position; //обьект встает на стартовую точку пути if(Type == MovementType.Walking) //если тип врага обычный получаем компонент с нужным типом передвижения { walkingEnemy = GetComponent(); } } void Update() { if (pointInPath == null || pointInPath.Current == null) //проверка отсутствия пути { return; } if (Type == MovementType.Walking) //если выбран этот вид { walkingEnemy.EnemyMoving(pointInPath); //вызываем функцию передвижения для этого вида } else if (Type == MovementType.Flying) { } else if (Type == MovementType.Jumping) { } var distanceSqure = (transform.position - pointInPath.Current.position).sqrMagnitude; //проверка достаточно ли мы близко к точке чтобы двигаться к следующей точке if (distanceSqure < MaxDistance * MaxDistance) //достаточно ли мы близко к точке? { pointInPath.MoveNext(); //движемся к следующей точке } } }