欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

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

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

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

 

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

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

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

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

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

相关标签: 移动