【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對象上。

六、預覽效果

按【播放】按鈕預覽遊戲,就會發現行進的膠囊體會一直等待橋面出現後,才經過橋到達目的地。

相關文章
相關標籤/搜索