美文网首页游戏极客社区
Unity之寻路navigation

Unity之寻路navigation

作者: 困卡 | 来源:发表于2017-04-26 23:31 被阅读31次
1.打开寻路设置窗口

Window -> Navigation


2. 建立地形,生成寻路网格

Create Plane、 Cube ,然后在 Navigation 窗口点击 Bake 生成寻路网格。



可行通区域就出来了


3. 创建一个行走的 Actor(黑色眼镜那个) 和几个行走点(绿色球)
4. 给 Actor 添加行走

在 Actor 身上挂个 Nav Mesh Agent

5.添加个行走控制的脚本


using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class NavMove : MonoBehaviour
{
    public NavMeshAgent agent;
    public Transform[] destPos = new Transform[] { };
    int currentPoint = 0;

    void Start()
    {
        agent.Stop();
        StartCoroutine(Move());
    }

    IEnumerator Move()
    {
        //enable agent updates
        agent.Resume();
        agent.updateRotation = true;

        agent.SetDestination(destPos[currentPoint].position);
        yield return StartCoroutine(WaitForDestination());

        StartCoroutine(NextWaypoint());
    }

    IEnumerator WaitForDestination()
    {
        yield return new WaitForEndOfFrame();
        while (agent.pathPending)
            yield return null;
        yield return new WaitForEndOfFrame();

        float remain = agent.remainingDistance;
        while (remain == Mathf.Infinity || remain - agent.stoppingDistance > float.Epsilon
        || agent.pathStatus != NavMeshPathStatus.PathComplete)
        {
            remain = agent.remainingDistance;
            yield return null;
        }

        Debug.LogFormat("--- PathComplete to pos:{0}", currentPoint);
    }

    IEnumerator NextWaypoint()
    {
        currentPoint++;
        currentPoint = currentPoint % destPos.Length;
        Transform next = destPos[currentPoint];
        agent.SetDestination(next.position);
        yield return StartCoroutine(WaitForDestination());

        StartCoroutine(NextWaypoint());
    }
}

效果:


Navigation寻路-添加障碍物Obstacle

(在场景中添加障碍物,需要点Bake重新烘焙出新的 导航网格,不是运行时。
如果在运行时添加障碍物动态Bake出新的导航网格,就需要使用 Nav Mesh Obstacle)

1.创建个Cube对象 Obstacle1

2.身上挂一个组件 Nav Mesh Obstacle

3.再挂一个刚体组件 Rigidbody,并约束位置和旋转(因为不希望被撞飞)


然后可以制作成预制件Prefab,在运行时动态 Instantiate 实例化出来,寻路网格 会重新生成
效果:


相关文章

  • Unity之寻路navigation

    1.打开寻路设置窗口 Window -> Navigation 2. 建立地形,生成寻路网格 Create Pla...

  • Unity Navigation系列一 静态导航

    参考【Unity3D】自动寻路系统Navigation实现人物上楼梯、走斜坡、攀爬、跳跃[https://clou...

  • Navigation导航寻路

    NavMesh简介 unity 中使用Navigation作为解决方案。 寻路(驱动一个游戏物体移动到目标位置上)...

  • 寻路之Navigation

    在unity中,通常会使用导航网格(Navigation)做寻路,但有时也会对场景直接划分格子,并自己实现A*算法...

  • Unity 运动的方向

    Unity 3D Navigation(导航)是用于实现动态物体自动寻路的一种技术,它将游戏场景中复杂的结构关系简...

  • Unity GameAI 启发式搜索算法(A *算法底层)

    A*算法 虽然在unity给我们的提供了Navigation作为我们寻路的解决方案,但是在实际中我们同样也不得不使...

  • Navigation自动寻路技术(一)

    写在前面 第一篇:测试工具的定制Navigation是Unity内置的寻路解决方案 场景图 注:蓝色的小旗是路径点...

  • 6.2 AI寻路 navigation - 听觉

    AI获取坐标参考 > 6.AI寻路navigation - 视觉

  • Navigation 分层寻路

    分层寻路 在我们的实际开发过程中,往往有很多复杂的情况,如船只能在水面上行驶,不能再陆地上行驶,这时我们就需要进行...

  • VR开发实战之Navigation寻路

    一.什么是寻路? 寻路顾名思义就是:角色在到达指定地点的过程中遇到障碍物会自动避开并自行选取最短的路程进行移动。大...

网友评论

本文标题:Unity之寻路navigation

本文链接:https://www.haomeiwen.com/subject/stnwzttx.html