Unity功能点---固定路线的移动(多个目标点)
程序员文章站
2024-03-15 19:59:24
...
很简单的功能,记录几种移动的方式:
先上完整代码:
using UnityEngine;
using UnityEngine.AI;
public delegate void FindPath();
public class NavTest : MonoBehaviour
{
public NavMeshAgent agent;//自身寻路代理
public Transform[] Dess;
public int index = 0;
private void Update()
{
//MoveTest(NavMeshTest);
//MoveTest(MoveTowardsTest);
MoveTest(TranslateTest);
}
public void MoveTest(FindPath path)
{
if (Vector3.Distance(transform.position, Dess[index].position) <= 0.3f)
{
if (index < Dess.Length - 1)
{
index += 1;
}
else
{
index = 0;
}
}
path.Invoke();
}
public void NavMeshTest()
{
agent.SetDestination(Dess[index].position);
}
public void MoveTowardsTest()
{
transform.position = Vector3.MoveTowards(transform.position, Dess[index].position, 2 * Time.deltaTime);
}
public void TranslateTest()
{
transform.Translate((Dess[index].position - transform.position).normalized * 2 * Time.deltaTime);
}
}
看下Unity的里面的设置:
把自身的初始位置也赋值给目标点了,这样启动时就会自动前往下一个目标点。
首先是使用Unity的自动寻路代理,可以自动越过障碍物,前面的文章具体讲过这方面的内容,直接设置目标点就可以了
然后是Vector3.MoveTowards()方法,这个和Vector3.Lerp()几乎一样,就是移动时速度变化不一样,大家可以试试,
最后一个参数的意思是移动的最大速度不会超过这个值
最后是Transform.Translate()方法,常规移动方法,只需要控制移动的方向:这里的方向就是自身指向目标点的方向,由于只需要方向,所以把结果单位化,不然速度会根据距离变化。
上一篇: poweshell函数和管道