В большинстве случаев он нормально перемещается между путевыми точками, но иногда дроид делает круги вокруг путевой точки без остановок. Затем мне нужно остановить игру и запустить ее снова.
Я попытался встать посреди пути дроидов, двигая игрока от первого лица, может это является причиной проблемы?
Я добавил несколько путевых точек на лестнице, чтобы дроид мог двигаться вверх / вниз по лестнице, а затем, после нескольких раундов, перемещаясь между путевыми точками, он начал кружить вокруг одной из путевых точек на лестнице.
Дроид парит в воздухе. У дроида есть аниматор, коллайдер коробки, жесткое тело:
Это скрипт для путевых точек:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Waypoints : MonoBehaviour
{
public GameObject objectToMove;
public GameObject[] waypoints;
public Transform target;
public float moveSpeed = 1f;
public float rotationSpeed = 1f;
private Transform myTransform;
private int targetsIndex = 0;
private Vector3 originalPosition;
// Use this for initialization
void Start()
{
if (objectToMove == null)
{
myTransform = transform;
}
else
{
myTransform = objectToMove.transform;
}
originalPosition = myTransform.position;
if (waypoints.Length == 0)
{
waypoints = GameObject.FindGameObjectsWithTag("Waypoint");
}
}
// Update is called once per frame
void Update()
{
WayPointsAI();
DrawLinesInScene();
}
private void WayPointsAI()
{
if (targetsIndex == waypoints.Length)
targetsIndex = 0;
target = waypoints[targetsIndex].transform;
float distance = Vector3.Distance(myTransform.position, target.transform.position);
myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);
//move towards the player
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
if (distance < 0.3f)
targetsIndex++;
}
void DrawLinesInScene()
{
// draw lines between each checkpoint //
for (int i = 0; i < waypoints.Length - 1; i++)
{
Debug.DrawLine(waypoints[i].transform.position, waypoints[i + 1].transform.position, Color.blue);
}
// draw a line between the original transform start position
// and the current transform position //
Debug.DrawLine(originalPosition, myTransform.position, Color.red);
// draw a line between current transform position and the next waypoint target
// each time reached a waypoint.
if (target != null)
Debug.DrawLine(target.transform.position, myTransform.position, Color.green);
}
}
I проверил его снова сейчас, и я обнаружил, что если игрок не стоит посередине пути дроидов, этого не произойдет. но если я стою посреди пути дроида, он пройдет мимо меня, но затем начнет кружить на следующей путевой точке.