Unity_尋路系統

Zzzico發表於2017-09-05

就像英雄聯盟等遊戲裡的小兵一樣,按照規定好的路線自行移動。

using UnityEngine;
using System.Collections;
using System;
//尋路系統
public class PathfindingSystems : MonoBehaviour {
    //儲存所有的路點
    public GameObject[] points;
    //記錄下一個即將到達的路點
    int nextPointIndex;
    //速度
    public int speed;
    // Use this for initialization
    void Start () {
        //尋找所有的路徑點物件
        points = GameObject.FindGameObjectsWithTag("EnemyPoint_GJG");
        //上面的方法獲取到的路點在陣列中儲存的順序是降序的,我們使用Sort重新排序,Sort預設是升序狀態,我們也可以使用Rever
        Array.Sort(points, (x, y) => { return x.name.CompareTo(y.name); });
        //設定遊戲物件的初始位置
        transform.position = points[0].transform.position;
        //設定初始角度
        transform.forward = points[nextPointIndex].transform.position - transform.position;
    }

    // Update is called once per frame
    void Update () {

        //判斷自身距離下一個路徑點的位置,0.1f是在貼近下一個路徑點時提前0.1f的距離轉向,不會出現抖動
        if (Vector3.Distance(points[nextPointIndex].transform.position,transform.position)<0.1f)
        {
            //如果下一個路徑點不是最後一個則加一,-1是獲取Points的最大索引值
            if (nextPointIndex != points.Length - 1)
            {
                nextPointIndex++;
            }

        } 
        //設定每一個點的轉向
            transform.forward = points[nextPointIndex].transform.position - transform.position;
        //全軍出擊
        transform.position =   Vector3.MoveTowards(transform.position,points[nextPointIndex].transform.position, speed * Time.deltaTime);
    }
}

這裡呢我先建立了一個空物體,在建立幾個球體並放在空物體內排序,然後把球體的Tag修改後,如下圖:
這裡寫圖片描述
然後把指令碼掛給小兵,然後把球體拖拽到掛載在小兵的指令碼里,如下圖:
這裡寫圖片描述
最後的效果圖
這裡寫圖片描述

相關文章