1. 程式人生 > >【Unity3D】學習筆記(第1記) 敵人AI之Seek(靠近)

【Unity3D】學習筆記(第1記) 敵人AI之Seek(靠近)

using UnityEngine;
using System.Collections;

public class enemyController : MonoBehaviour {

 public float  distanceToMe;           //智慧體到目標的距離
 public GameObject  me;                //目標角色
 public float isSeekDistance = 10.0f;  //可靠近範圍
 public int state;                     //智慧體狀態

 void Start()
 {
  me = GameObject.FindWithTag ("Player");
 }
利用Switch()可以新增其他功能,如攻擊,逃跑等;
 void Update()
 {
  switch (state)
  {
   case 0:
    Idle();   //空閒,四處遊蕩
    break;
   case 1:
    Seek();   //向目標靠近
    break;
  }
 }
 //智慧體空閒函式
 void Idle()
 {
  //獲取兩者間的距離
  distanceToMe = Vector3.Distance( me.transform.position ,this.transform .position);
  if (distanceToMe > isSeekDistance) //大於可靠近範圍,進入空閒狀態
  {
   state = 0;
   if(Random.value >0.5)             //通過隨機值,使其隨機左右移動
   {
    this.transform.Rotate(Vector3.up*5);
   }
   else
   {
    transform.Rotate(Vector3.up*-5.0f);
   }
   this.transform.Translate(Vector3.forward *0.1f);
  }
  else 
  {
   state = 1;  
  }
 }
注意LookAt()方法,功能是注視,引數是目標,即智慧體會一直注視目標,跟著它旋轉
 //智慧體靠近函式
 void Seek()
 {
  distanceToMe = Vector3.Distance( me.transform.position ,this.transform .position);
  if (distanceToMe < isSeekDistance) 
  {
   this.transform.LookAt(me.transform );               //該方法使智慧體總是面對目標
   this.transform.Translate (Vector3.forward * 0.1f);  //向目標前進,即靠近(Vector3.back 後退,則逃避)
  }
  else
  {
   state = 0;
  }
 }

}