• 【Unity】12.2 导航网格寻路简单示例


    开发环境:Win10、Unity5.3.4、C#、VS2015

    创建日期:2016-05-09

    一、简介

    本节通过一个简单例子,演示如何利用静态对象实现导航网格,并让某个动态物体利用导航网格自动寻路,最终找到目标。

    二、设计步骤

    1、添加3个Cube

    启动Unity应用程序打开ch1201_Navmesh_Sample工程,新建一个名为Demo1-1.unity的场景,然后在场景中创建3个Cube,如下图所示:

    image

    2、生成导航网格

    (1)将3个Cube全变为Static

    分别选中游戏场景中的3个Cube对象,在Inspector视图中单击static将其变为静态(目的是为了让Unity利用这些静态的游戏对象来生成导航网格),再右击Static右侧的下拉按钮,可看到它已经自动勾选了下面的复选框,如下图所示:

    image

    (2)显示导航视图

    选择【Window】->【Navigation】,将导航窗口显示出来:

    image

    此时就会在检视器视图的右边显示【Navigation】标签页。

    (3)设置烘培(Bake)参数

    切换到【Navigation】视图,然后切换到【Object】选项卡,可看到它默认选择的是【All】,再切换到【Bake(烘培)】选项卡,将参数改为下图所示的值(这样做的目的是为了让角色可以沿着斜坡走到红色Cube的顶部),修改完成后单击下方的【Bake(烘培)】按钮:

    image  image

    此时就会在场景中看到烘培的效果:

    image

    至此,导航网格生成完毕。

    3、添加导航目标

    在红色Cube的上方添加一个绿色的Cube,并将其名称改为greenCube,该对象将作为导航寻路的目标,如下图所示:

    image

    4、寻路

    (1)添加寻路的行进对象

    在场景中新建一个胶囊体组件Capsule,该对象将作为行进的对象:

    image

    将该胶囊体命名为player,然后在检视器视图中,将【Scale】设置为(0.2,0.2,0.2),如下图所示:

    image

    选中player,然后选择【Component】->【Navigation】->【Nav Mesh Agent】,这样就为该胶囊体添加了导航组件:

    image

    此时会看到在胶囊体的周围有一个浅绿色的网格体:

    image

    (2)编写C#脚本

    鼠标右击Assets,添加C#脚本,该脚本将用于让胶囊体自动寻找导航目标:

    image

    将该脚本命名为Demo1Test.cs,然后双击该文件,Unity就会自动在VS2015中打开它,将该文件改为下面的代码:

    using UnityEngine;
    using System.Collections;
    
    public class RunTest : MonoBehaviour
    {
        public GameObject TargetObject = null;
        void Start()
        {
            if (TargetObject != null)
            {
                GetComponent<NavMeshAgent>().destination = TargetObject.transform.position;
            }
        }
        void Update() { }
    }

    (3)将脚本添加到胶囊体对象上

    保存Demo1Test.cs脚本,然后切换到Unity,拖动该脚本到层次视图中的胶囊体对象(player)上,如下图所示:

    image

    至此,将胶囊体设置成行进物体的工作就完成了。

    (4)设置寻路目标

    选中胶囊体对象,然后将greenCube拖放到检视器中的【Target Object】属性值上:

    image

    (5)预览导航寻路效果

    单击【播放】按钮,观察胶囊体自动寻路的动画效果。此时会发现,胶囊体会自动寻找合适的路线,并沿该路线到达目标(greenCube)。

    (6)观察目标在不同位置情况下的自动寻路过程

    将绿色的Cube移动到另一个位置,再次单击【播放】按钮观察导航寻路的动画效果。

    5、改变目标位置观察是否钻桥洞

    (1)移动目标到桥的另一侧

    保存场景,然后再将该场景另存为Scene1-2。

    打开Scene1-2,将胶囊体移到桥的左侧,并将绿色Cube移到桥的另一侧,如下图所示:

    image

    单击【播放】按钮,观察胶囊体自动寻路的效果。此时会发现,胶囊体会绕过桥洞从旁边寻路到目标。就是说,它不会自动钻桥洞。

    (2)让胶囊行进体可以钻过桥洞

    保存场景,然后再将该场景另存为Scene1-3。

    打开Scene1-3,在Navigation视图中,将【Agent Height】的值改为0.2,然后单击下【Bake】按钮进行烘培,如下图所示:

    image

    按【播放】按钮,此时就会看到胶囊体钻过桥洞到达了目的地(greenCube),而不再是绕过桥障碍物后才找到目标。

  • 相关阅读:
    从一个表复制信息到另一个表
    Base64原理 bits 3>4 8bits/byte>6bits/byte
    blockchain
    routing decisions based on paths, network policies, or rulesets configured by a network administrator
    Least_squares 最小二乘法
    How to Write a Spelling Corrector
    prior knowledge
    Law of total probability
    Subset sum problem
    wdateyearmonthweekgategoryamountcoin
  • 原文地址:https://www.cnblogs.com/rainmj/p/5472491.html
Copyright © 2020-2023  润新知