文章

目前顯示的是 二月, 2013的文章

一個簡易的兩點移動巡邏AI

圖片
因為單純要寫一個敵人AI在兩個端點移動並待機幾秒,所以這個程式沒有寫得很複雜。 主要用四個布林來判斷狀態,分別為 行走 、 待機 、 是否面對方向 、 是否到達巡邏點 待機開始時,會先關閉判斷是否到達巡邏點的布林,所以在開頭會以 #pragma strict var pointA : Transform; // 巡邏點A var pointB : Transform; // 巡邏點B var lookAtTarget : Transform; // 目前巡邏 var lookAtPos: Vector3; // 目前巡邏點座標 var lookAtPoint :int = 1; // 預設巡邏點 var Gravity : float = 20.0; // 重力 var walkSpeed : float = 1.0; // 走路速度 var idleTimes : float = 3.0; // 待機時間 // ------- 狀態布林 ---------- // : 行走、待機、面對方向、到達巡邏點 var walk:boolean; var idle:boolean; var isFaced:boolean; var inPoint:boolean; private var MoveDirection : Vector3 = Vector3.zero; function Start () { idle = true; inPoint = true; } 來進行初始化的動作。 在物件結構上,會建立一個空物件(Empry),底下分別擺放敵人模型、巡邏點A(Empry)、巡邏點B(Empry),並將兩個巡邏點拉到開頭宣告的兩個 Transform。 而在每個影格不斷反覆確認各種狀態,行走第一次則要先確認是否面對著下個要巡邏的位置,且不斷進行行走與判斷是否到達巡邏點的函數。 function Update () { // 假使 走路狀態 為真 if (walk) { // 假使 面向巡邏點 為否 if (!isFaced) { // 執行 面向巡邏點 函數 FaceToPoint(); } // 執行 行走 函數 Walking(