U3D基礎之人工智慧—敵人巡邏

張三千8800發表於2020-10-05

敵人巡邏

首先在場景中建立幾個巡邏的點,將玩家和敵人的Tag設定為相應的Tag
其中enemy的元件如下
在這裡插入圖片描述
在Enemy指令碼中程式碼如下

public class Enemy : MonoBehaviour
{
    public float PatrolSpeed = 3f;
    public float PatrolWaitTime = 1f;
    public Transform PatrolWayPoints;
    private NavMeshAgent agent;
    private float PatrolTimer = 0f;
    private int wayPointsIndex = 0;
    private void Start()
    {
        agent = GetComponent<NavMeshAgent>();
    }
    private void Update()
    {
        Patrolling();
    }
    /// <summary>
    /// 巡邏函式
    /// </summary>
    void Patrolling()
    {
        agent.isStopped = false;//首先將運動狀態設定為運動
        agent.speed = PatrolSpeed;//設定巡邏速度
        if (agent.remainingDistance < agent.stoppingDistance)//如果已經到達目標點
        {
            PatrolTimer += Time.deltaTime;
            if (PatrolTimer > PatrolWaitTime)
            {
                if (wayPointsIndex == PatrolWayPoints.childCount - 1)
                    wayPointsIndex = 0;
                else
                    wayPointsIndex++;
                PatrolTimer = 0;    
            }
        }
        else
            PatrolTimer = 0;
        agent.destination = PatrolWayPoints.GetChild(wayPointsIndex).position;
    }
}

因為其中判斷是否到達目標點涉及到距離的比較,需要將敵人的Stopping Distance設定一下,代表之間的冗餘。
在這裡插入圖片描述

相關文章