日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

[Unity3D]Unity3D游戏开发之怪物AI

發布時間:2024/3/24 ChatGpt 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Unity3D]Unity3D游戏开发之怪物AI 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,歡迎大家關注由我為大家帶來的Unity3D游戲開發系列文章,我的博客地址為:http://blog.csdn.net/qinyuanpei。

? ? ? ?在上一篇文章中,我們基本上實現了一個小地圖的功能,今天呢,我們來實現怪物AI,所謂怪物AI就是指我們為怪物編寫一定的算法,使其可以具備一定程度的智能化,以增強游戲的可玩性。在一般的RPG游戲中,怪物通常在一個游戲設定的范圍內巡邏,當玩家進入怪物的警戒范圍時,怪物就會由巡邏狀態轉變為攻擊狀態,向玩家進行攻擊,那么,我們今天就來實現一個簡單的怪物AI吧,下面我們一起來看代碼:

[csharp]?view plaincopyprint?
  • 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為我們的玩家對象,在這里我們使用了官方提供的第三人稱角色控制器組件,最終實現的效果如下 :



    ? ? ? ?可以看到,在不同的時刻,怪物可以自己執行不同的狀態動作,當玩家靠近怪物的時候,會被敵人追擊,這就是今天的內容啦,謝謝大家!



    轉載:原文出處

    總結

    以上是生活随笔為你收集整理的[Unity3D]Unity3D游戏开发之怪物AI的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。