【Unity】12.5 Navmesh Obstacle组件

开发环境:Win十、Unity5.3.四、C#、VS2015 spa

建立日期:2016-05-09 code

1、简介

在大多数游戏情景中,可行进的区域每每不是彻底不变的。好比被破坏的路、桥等将再也不容许经过。那么,如何控制行进物体呢?有两种解决办法。 对象

第一种解决办法是分层控制,而后动态更改可行进层,好比对于不一样的桥,分别用不一样的层来控制。可是这种处理有一个局限性,好比一个游戏场景中包含不少桥的情形,每一个桥都有本身的通行或禁止状态,那么若是分层控制,那么就须要为每个桥分一个层,这样—来层数确定不够用,由于在Unity中最多只能分32层。其次,在行进物体不少的时候,频繁改动进行物体的可行进层也不是—件轻松的事情。 blog

第二种解决办法是利用Navmesh Obstade组件处理相似动态路障的问题。只要将该组件挂载到动态路障上,行进物体将会在寻路时自动躲避这些路障。 游戏

2、示例

该例子主要介绍第二种办法的具体实现。即:利用Navmesh Obstade组件处理相似动态路障的问题。采用这种办法时,不须要手动改变行进物体的可行进层,只须要在桥体上挂载Navmesh Obstade组件,而后经过脚本改变Navmesh Obstade组件的enable的值便可。在桥对象可通行时,enable的值为false,桥面不可通行时enable的值为true。 开发

一、建立场景 get

在ch1201_Navmesh_Sample工程中,新建一个名为Demo4的场景,在场景中分别添加下面的对象: it

image

其中,Demo4Mask下的Cube都是静态的,player是行进对象,greenCube是目的地。 io

二、烘培 table

具体步骤和前面的节相似,烘培后的结果以下:

image

三、为bridge添加Nav Mesh Obstable组件

在层次视图中选中bridge,为其添加【Nav Mesh Obstable】组件:

image

添加后,可看到bridge会被一个绿色的网格包围。

四、编写脚本

添加一个名为Demo4BridgeControl.cs的脚本,将其改成下面的内容:

using UnityEngine;
using System.Collections;

public class Demo4BridgeControl : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(Init());
    }

    IEnumerator Init()
    {
        GetComponent<Renderer>().enabled = false;
        yield return new WaitForSeconds(2.0f);
        GetComponent<NavMeshObstacle>().enabled = false;
        GetComponent<Renderer>().enabled = true;
    }

    void Update() {  }
}

代码中用了yield return来代替计时,这种方式比直接用一个time变量控制计时方便,代码也显得更简洁。

五、将脚本添加到bridge

将脚本拖放到bridge对象上。

六、预览效果

按【播放】按钮预览游戏,就会发现行进的胶囊体会一直等待桥面出现后,才经过桥到达目的地。

相关文章
相关标签/搜索