大家好。歡迎大家關注由我為大家帶來的Unity3D游戲開發系列文章,我的博客地址為:http://blog.csdn.net/qinyuanpei。
在上一篇文章中,我們基本上實現了一個小地圖的功能,今天呢,我們來實現怪物AI,所謂怪物AI就是指我們為怪物編寫一定的算法。使其能夠具備一定程度的智能化,以增強游戲的可玩性。在一般的RPG游戲中,怪物通常在一個游戲設定的范圍內巡邏。當玩家進入怪物的警戒范圍時,怪物就會由巡邏狀態轉變為攻擊狀態,向玩家進行攻擊,那么,我們今天就來實現一個簡單的怪物AI吧,以下我們一起來看代碼:
- using UnityEngine;
- using System.Collections;
- public class AI : MonoBehaviour {
- //定義怪物的四種狀態:站立、行走、奔跑、無所事事
- public const int STATE_STAND=0;
- public const int STATE_WALK=1;
- public const int STATE_RUN=2;
- //怪物當前狀態
- private int NowState;
- //游戲角色
- public GameObject Hero;
- //怪物思考時間
- public const int AI_THINK_TIME=2;
- //觸發怪物攻擊的臨界距離
- public const int AI_ATTACT_DISTANCE=10;
- //上一次思考的時間
- private float LastThinkTime;
- void Start ()
- {
- }
- void Update ()
- {
- //當敵人與怪物間的距離小於攻擊范圍半徑的時候
- if(Vector3.Distance(transform.position,Hero.transform.position)<AI_ATTACT_DISTANCE)
- {
- //敵人開始奔跑
- this.GetComponent<Animation>().Play("run");
- //敵人進入奔跑狀態
- NowState=STATE_RUN;
- //使敵人面向角色
- transform.LookAt(Hero.transform);
- //向玩家靠近
- transform.Translate(Vector3.forward*Time.deltaTime * 5);
- }else
- {
- //當當前時間與上一次思考時間的差值大於怪物的思考時間時怪物開始思考
- if(Time.time-LastThinkTime>AI_THINK_TIME)
- {
- //開始思考
- LastThinkTime=Time.time;
- //獲取0-3之間的隨機數字
- int Rnd=Random.Range(0,2);
- //依據隨機數值為怪物賦予不同的狀態行為
- switch(Rnd)
- {
- case 0:
- //站立狀態
- this.GetComponent<Animation>().Play("idle");
- NowState=STATE_STAND;
- break;
- case 1:
- //行走狀態
- //使怪物旋轉以完畢行走動作
- Quaternion mRotation=Quaternion.Euler(0,Random.Range(1,5)*90,0);
- transform.rotation=Quaternion.Slerp(transform.rotation,mRotation,Time.deltaTime*1000);
- //播放動畫
- this.GetComponent<Animation>().Play("walk");
- //改變位置
- transform.Translate(Vector3.forward*Time.deltaTime * 3);
- NowState=STATE_WALK;
- break;
- case 2:
- //奔跑狀態
- this.GetComponent<Animation>().Play("run");
- transform.Translate(Vector3.forward*Time.deltaTime * 5);
- NowState=STATE_RUN;
- break;
- }
- }
- }
- }
- }
在上面的代碼中,能夠觸發怪物狀態發生變化的有兩個條件,第一,是玩家進入了怪物的警范圍。此時怪物將面向玩家奔跑靠近;第二,當前時間與怪物上一次思考的時間之差大於怪物的思考時間,此時,怪物將隨機作出反應。
好。以下我們回到游戲界面其中來。
如圖,博主事先從官方資源商店里下載了一個人物模型。在這個模型中,設計者已經為我們設計好了人物動畫,我們將這個模型拖放到場景中,調整到合適的位置。並將人物默認動畫設置為idle。以下我們將剛才寫好的腳本拖放到此模型上,並設置Hero為我們的玩家對象,在這里我們使用了官方提供的第三人稱角色控制器組件,終於實現的效果例如以下 :
能夠看到,在不同的時刻。怪物能夠自己運行不同的狀態動作,當玩家靠近怪物的時候。會被敵人追擊,這就是今天的內容啦,謝謝大家!
轉載:原文出處