NavMeshについて一通り学習中。
スロープのある経路を作って、定期巡回のコードを作りました。
ゾンビなので、ターゲットが近い場合は、定期巡回を外れてそっちに襲ってくる。
StandardAssetのToonシェーダーがいい感じ!
高度差のある経路でBakeします。
定期巡回はよくあるコード
public class Move : MonoBehaviour { public GameObject target; NavMeshAgent agent; public Transform[] points= new Transform[5]; private int nowPoint; void Start () { nowPoint = 0; agent = GetComponent<NavMeshAgent>(); agent.radius = 0.1f; agent.speed = 1.4f; GotoNextPoint(); } void Update () { if (agent.remainingDistance < 0.5f) GotoNextPoint(); } void GotoNextPoint() { if (points.Length == 0) return; agent.destination = points[nowPoint].position; nowPoint = (nowPoint + 1) % points.Length; } }
あらかじめPoints配列に経路上の通過ポイントを設定しておく。
destinationに到着するたびに次のpointに目的地を変更
nowPoint=(nowPoint + 1) % points.Length;
これでコードが代入されるたびにnowPointが0からLength内で繰り返す。
あと、はじめハマったのが、NavMeshAgent同士がぶつかり合って動けなくなったんですよ。
まるでコライダーがあるRigidBodyみたいに。
でもRidigBodyじゃないし。
検索しても原因が分からず、色々と値をいじってみてわかりました。
agent.radius = 0.1f;
このradiusを小さくしないと互いにぶつかります。小さいとすり抜ける。