Unity功能点---固定路线的移动(多个目标点)

很简单的功能,记录几种移动的方式:

先上完整代码:

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功能点---固定路线的移动(多个目标点)_第1张图片

把自身的初始位置也赋值给目标点了,这样启动时就会自动前往下一个目标点。

首先是使用Unity的自动寻路代理,可以自动越过障碍物,前面的文章具体讲过这方面的内容,直接设置目标点就可以了

 

然后是Vector3.MoveTowards()方法,这个和Vector3.Lerp()几乎一样,就是移动时速度变化不一样,大家可以试试,

最后一个参数的意思是移动的最大速度不会超过这个值

最后是Transform.Translate()方法,常规移动方法,只需要控制移动的方向:这里的方向就是自身指向目标点的方向,由于只需要方向,所以把结果单位化,不然速度会根据距离变化。

欢迎加群:4364930讨论。

你可能感兴趣的:(Unity,功能点,移动)