using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using
UnityEngine.AI;
//скрипт заставляет объект патрулировать, т.е. тупо ходить туда-сюда по вейпоинтам в случайном порядке
public class ObjectsNavigation : MonoBehaviour //НЕ ЗАБУДЬТЕ ПЕРЕИМЕНОВАТЬ ФАЙЛ СКРИПТА В НАЗВАНИЕ КЛАССА
{
//хранит папку точек
[Tooltip("Перетащите сюда из иерархии родителя вейпоитов")]
public Transform parentWaypoints; //создайте в иерархии пустой объект, и удочерите ему вейпоинты, по которым нужно ходить
//Минимальная дистанция до вейпоита, когда объект посчитает, что дошел до нее
float minDistance = 1f;
//близко к 0 лучше не ставить, так как некоторые объекты никогда не достигнут вейпоинта,
//если вейпоинт на земле, а центр объекта выше указанного вами расстояния
//создаем переменную с навигационным мешем
UnityEngine.AI.NavMeshAgent agent;
//указывает на какую из точек сейчас идти (выбирается случайным образом в ToRandWaypoint())
int randomWaypoint = 0;
private Animator myAnimator;
void Start()
{
//получаем в переменную навигационный меш
agent = GetComponent<UnityEngine.AI.NavMeshAgent>();
myAnimator = GetComponent<Animator> ();
ToRandWaypoint();
}
void Update()
{
//если дистанция до точки меньше минимально необходимой (т.е. мы пришли к точке)
if (Vector3.Distance(transform.position, parentWaypoints.GetChild(randomWaypoint).transform.position) <= minDistance)
{
//отправляем к случайной точке
ToRandWaypoint();
}
}
void ToRandWaypoint()
{
//выбираем номер случайной точки от 0 до числа количества вейпоинтов (дочерних объектов) в parentWaypoints
randomWaypoint = Random.Range(0, parentWaypoints.childCount);
//направляем агента в эту точку
agent.destination = parentWaypoints.GetChild(randomWaypoint).transform.position;
myAnimator.Play ("run");
}
}