EnemyFollowPath.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class EnemyFollowPath : MonoBehaviour //для передвижения врага по заданному пути с возможностью выбора видов врага
  5. {
  6. public enum MovementType //типы передвижения
  7. {
  8. Walking,
  9. Flying,
  10. Jumping
  11. }
  12. public MovementType Type = MovementType.Walking; //вид движения
  13. public EnemyPatrolling MyPath; //используемый путь
  14. public float MaxDistance = .1f; //максимальная дистанция подхода к точке
  15. private WalkingEnemyMoving walkingEnemy; //для обращения к скрипту задающему движение врагу
  16. public IEnumerator<Transform> pointInPath; //проверка точек
  17. void Start()
  18. {
  19. if(MyPath == null) //проверяет прикрепили ли путь
  20. {
  21. return;
  22. }
  23. pointInPath = MyPath.GetNextPathPoint();
  24. pointInPath.MoveNext(); //получение следующей точки в пути
  25. if(pointInPath.Current == null) //есть ли точки к которой передвигаться
  26. {
  27. return;
  28. }
  29. transform.position = pointInPath.Current.position; //обьект встает на стартовую точку пути
  30. if(Type == MovementType.Walking) //если тип врага обычный получаем компонент с нужным типом передвижения
  31. {
  32. walkingEnemy = GetComponent<WalkingEnemyMoving>();
  33. }
  34. }
  35. void Update()
  36. {
  37. if (pointInPath == null || pointInPath.Current == null) //проверка отсутствия пути
  38. {
  39. return;
  40. }
  41. if (Type == MovementType.Walking) //если выбран этот вид
  42. {
  43. walkingEnemy.EnemyMoving(pointInPath); //вызываем функцию передвижения для этого вида
  44. }
  45. else if (Type == MovementType.Flying)
  46. {
  47. }
  48. else if (Type == MovementType.Jumping)
  49. {
  50. }
  51. var distanceSqure = (transform.position - pointInPath.Current.position).sqrMagnitude; //проверка достаточно ли мы близко к точке чтобы двигаться к следующей точке
  52. if (distanceSqure < MaxDistance * MaxDistance) //достаточно ли мы близко к точке?
  53. {
  54. pointInPath.MoveNext(); //движемся к следующей точке
  55. }
  56. }
  57. }