Change Path by Layer Cost

³×ºñ¸Þ½¬¿¡¼­ ±æÀ» ãÀ»¶§ Àå¾Ö¹° ¾øÀÌ °æ·Î¸¦ º¯°æ ÇÒ¼ö ÀÖ´Ù.
·¹À̾îÀÇ ºñ¿ëÀ» º¯°æÇÏ¸é ´Ù¸¥ °æ·Î¸¦ Ž»öÇÏ°Ô µÈ´Ù.

´ÙÀ½°ú °°ÀÌ °ÔÀÓ¿ÀºêÁ§Æ®¸¦ ¹èÄ¡ÇÑ´Ù.
Å¥ºê¸¦ ³×ºñ°ÔÀÌ¼Ç ¸Þ½¬·Î ±¸¿ï°ÍÀÌ´Ù.



³×ºñ¸Þ½¬ ·¹ÀÌ¾î ¸¸µé°í ±Á±â

³×ºñ¸Þ½¬·Î ·¹À̾ ¸¸µå´Â ¹æ¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æ º¸ÀÚ.

1. Navigation ºä¿¡¼­ ·¹À̾îÀÇ À̸§À» ¸¸µç´Ù.
¿©±â¼­´Â path1ÀÌ´Ù.



2. Navigation Area¸¦ ¼³Á¤ ÇÑ´Ù.

Static ¿ÀºêÁ§Æ®´Â "Walkable"·Î ¼³Á¤ µÇ¾î ÀÖ´Ù.
¿ì¸®°¡ Ãß°¡ÇÑ "path1"À¸·Î ¼³Á¤ÇÑ´Ù.

¿©±â¼­´Â Cube (2), Cube (3)À» "path1"À¸·Î º¯°æÇÑ´Ù.



3. ³×ºñ°ÔÀÌ¼Ç ¸Þ½¬¸¦ ±Á´Â´Ù.

4. NavMove.cs ½ºÅ©¸³Æ®¸¦ Player(Sphere ¸ð¾ç)¿¡ Ãß°¡ÇÏ°í Capsule ¿ÀºêÁ§Æ®¸¦ NavMove.TargetÀ¸·Î ¼³Á¤ÇÑ´Ù.

//NavMove.cs
using UnityEngine;

public class NavMove : MonoBehaviour {

    public GameObject Target;

    void Start()
    {
        GetComponent<NavMeshAgent>().SetDestination(Target.transform.position);
    }
}

ÄÚµå·Î È°¿ëÇϱâ

°æ·Î (A)°¡ ÃÖÀûÀÇ °æ·ÎÀÌ´Ù. ÄÚµå·Î ¾î¶² ¼öÁ¤µµ ÇÏÁö ¾ÊÀ¸¸é °æ·Î (A)·Î ¿òÁ÷ÀÏ °ÍÀÌ´Ù.
NavMesh.SetAreaCost( ) ÇÔ¼ö¸¦ ÀÌ¿ëÇØ ·¹À̾îÀÇ ºñ¿ëÀ» ¿Ã¸®¸é °æ·Î¸¦ ½Ç½Ã°£À¸·Î º¯°æ ÇÒ¼ö ÀÖ´Ù.

´ÙÀ½°ú °°ÀÌ "path1"ÀÇ ºñ¿ëÀ» 2·Î ¿Ã·Á ¹ö¸®¸é °æ·Î (A) ´ë½Å °æ·Î (B)·Î À̵¿ÇÒ°ÍÀÌ´Ù.
(SetLayerCost¿¡¼­ SetAreaCost·Î ¸í·É¾î°¡ º¯°æµÇ¾ú´Ù.)

//NavMesh.SetAreaCost(3, 2);
int layer = NavMesh.GetAreaFromName("path1");
NavMesh.SetAreaCost(layer, 2);

//NavMove.cs
using UnityEngine;

public class NavMove : MonoBehaviour {

    public GameObject Target;

    void Start()
    {
        //NavMesh.SetAreaCost(3, 2);
        int layer = NavMesh.GetAreaFromName("path1");
        NavMesh.SetAreaCost(layer, 2);

        GetComponent<NavMeshAgent>().SetDestination(Target.transform.position);
    }
}


Âü°í)
À̵¿ °æ·Î º¯°æ
http://tsubakit1.hateblo.jp/entry/2014/10/06/235926

»óȲ¿¡ µû¶ó À̵¿ °æ·Î º¯°æ
http://tsubakit1.hateblo.jp/entry/20140113/1389621842