You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.7 KiB
99 lines
2.7 KiB
3 years ago
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.AI;
|
||
|
|
||
|
public class AutoMove : MonoBehaviour
|
||
|
{
|
||
|
public NavMeshAgent agent;
|
||
|
public bool showPath;
|
||
|
public bool showAhead;
|
||
|
|
||
|
public Vector3 startPos;
|
||
|
public Vector3 endPos;
|
||
|
public bool isStart;
|
||
|
|
||
|
public float curPassedTime = 0;
|
||
|
public float timeInterval = 2;
|
||
|
|
||
|
// Start is called before the first frame update
|
||
|
void Start()
|
||
|
{
|
||
|
agent = GetComponent<NavMeshAgent>();
|
||
|
agent.updateRotation = false;
|
||
|
agent.updateUpAxis = false;
|
||
|
|
||
|
isStart = false;
|
||
|
Move();
|
||
|
}
|
||
|
|
||
|
// Update is called once per frame
|
||
|
void Update()
|
||
|
{
|
||
|
//curPassedTime += Time.deltaTime;
|
||
|
//if (curPassedTime > timeInterval)
|
||
|
//{
|
||
|
// curPassedTime = 0;
|
||
|
// Move();
|
||
|
//}
|
||
|
|
||
|
if (agent.remainingDistance < 0.1)
|
||
|
{
|
||
|
Move();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Move()
|
||
|
{
|
||
|
agent.destination = isStart ? startPos : endPos;
|
||
|
isStart = !isStart;
|
||
|
}
|
||
|
public static void DebugDrawPath(Vector3[] corners)
|
||
|
{
|
||
|
if (corners.Length < 2) { return; }
|
||
|
int i = 0;
|
||
|
for (; i < corners.Length - 1; i++)
|
||
|
{
|
||
|
Debug.DrawLine(corners[i], corners[i + 1], Color.blue);
|
||
|
}
|
||
|
Debug.DrawLine(corners[0], corners[1], Color.red);
|
||
|
}
|
||
|
|
||
|
private void OnDrawGizmos()
|
||
|
{
|
||
|
DrawGizmos(agent, showPath, showAhead);
|
||
|
}
|
||
|
|
||
|
public static void DrawGizmos(UnityEngine.AI.NavMeshAgent agent, bool showPath, bool showAhead)
|
||
|
{
|
||
|
if (Application.isPlaying)
|
||
|
{
|
||
|
if (showPath && agent.hasPath)
|
||
|
{
|
||
|
var corners = agent.path.corners;
|
||
|
if (corners.Length < 2) { return; }
|
||
|
int i = 0;
|
||
|
for (; i < corners.Length - 1; i++)
|
||
|
{
|
||
|
Debug.DrawLine(corners[i], corners[i + 1], Color.blue);
|
||
|
Gizmos.color = Color.blue;
|
||
|
Gizmos.DrawSphere(agent.path.corners[i + 1], 0.03f);
|
||
|
Gizmos.color = Color.blue;
|
||
|
Gizmos.DrawLine(agent.path.corners[i], agent.path.corners[i + 1]);
|
||
|
}
|
||
|
Debug.DrawLine(corners[0], corners[1], Color.blue);
|
||
|
Gizmos.color = Color.red;
|
||
|
Gizmos.DrawSphere(agent.path.corners[1], 0.03f);
|
||
|
Gizmos.color = Color.red;
|
||
|
Gizmos.DrawLine(agent.path.corners[0], agent.path.corners[1]);
|
||
|
}
|
||
|
|
||
|
if (showAhead)
|
||
|
{
|
||
|
Gizmos.color = Color.yellow;
|
||
|
Gizmos.DrawRay(agent.transform.position, agent.transform.up * 0.5f);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|