五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【A*Pathfinding】超級簡單的Unity2D尋路

2020-05-09 19:28 作者:皮皮關(guān)做游戲  | 我要投稿

作者:Yumir


哈嘍~我是yumir。

寫過俯視角射擊和“元?dú)怛T士”地圖生成之后,不做個(gè)敵人AI總覺得差點(diǎn)什么,所以又研究了一下Unity的2D尋路。

傳送門:這次我用的是A*Pathfinding的免費(fèi)版。

獲取方法:

在官網(wǎng):https://arongranberg.com/astar/? 點(diǎn)擊Download選項(xiàng),在跳轉(zhuǎn)到的頁面上選擇下載”Free“版本,將下載下來的文件導(dǎo)入到unity中,就可以開始我們的大事業(yè)了。

一、設(shè)置尋路網(wǎng)格

雖然也可以腳本控制,但是建議先簡單搭建一個(gè)場景熟悉下插件,而且能不寫代碼就完成功能我覺得香得很~

在搭建好的場景中新建一個(gè)空物體,點(diǎn)擊”AddComponent“搜索”Pathfinder“添加該組件。添加組件之后面板顯示如下,點(diǎn)擊圖中框選按鈕添加Grid Graph(Graphs>Grid Graph)。

由于我做的是2D尋路,所以將”2D“和”Use 2D Physic“勾選,使用2D模式,再在第三個(gè)紅框的位置選擇一個(gè)Layer,這個(gè)Layer表示”不能行走“的范圍,也就是障礙物,做這一步的同時(shí)需要將場景中的障礙物的Layer都設(shè)置為對應(yīng)的Layer。

”Width“和”Depth“分別表示網(wǎng)格的長高,單位是”nodes“也就是有幾個(gè)格子。下面的”Node size“ 表示格子的大小也可以理解為網(wǎng)格的精度,這些都根據(jù)需求調(diào)整。點(diǎn)擊下方的Scan按鈕,就會掃描生成尋路網(wǎng)格,紅色方框的部分代表不可行走,藍(lán)色部分則反之。

那么動態(tài)生成的地圖應(yīng)該怎么烘焙網(wǎng)格呢,設(shè)置一張對應(yīng)大小的網(wǎng)格然后在地圖生成結(jié)束的時(shí)候調(diào)用插件提供的方法即可:

GetComponent<AstarPath>().Scan();

?

二、讓敵人找到玩家

首先我們需要一個(gè)迷人的反派角色,我把玩家的貼圖疊了一層紅色畫了個(gè)紅眼睛用來充當(dāng),效果還不錯(cuò)。

新建一個(gè)空物體作為反派角色的父物體,在該物體上添加”AI Path“組件,而后系統(tǒng)會自動添加另一個(gè)組件”Seeker“,這是因?yàn)锳I Path需要利用Seeker來尋路,放著別動就行,除非你打算自定義一個(gè)AI Path。

再添加一個(gè)”AI Destination Setter“組件,該組件負(fù)責(zé)更新目標(biāo)位置。

AI Path主要修改以下內(nèi)容:Orientation、Enable Rotation、Gravity。

再將玩家角色拖拽到AI Destination Setter的Target上,點(diǎn)擊運(yùn)行就可以看到尋路的效果。


三、簡單AI實(shí)現(xiàn)

迷人的反派角色當(dāng)然不能只是跟屁蟲,這里給他寫一個(gè)簡單的狀態(tài)機(jī),分別又待機(jī)、追逐、攻擊三個(gè)狀態(tài):

enum EnemyState

{

??? Idle,

??? Tracking,

??? Attack

}

?

在Update中根據(jù)當(dāng)前的狀態(tài)類型分別調(diào)用對應(yīng)的方法:

??????? switch (enemyState)

??????? {

??????????? case EnemyState.Idle:

??????????????? Idle();

??????????????? break;

??????????? case EnemyState.Tracking:

??????????????? Tracking();

??????????????? break;

??????????? case EnemyState.Attack:

??????????????? Attack();

??????????????? break;

??????????? default:

??????????????? break;

??????? }

?

AI Path沒有提供停止尋路的接口,但是沒關(guān)系,將速度設(shè)置為零就可以讓他停下了。在各自的狀態(tài)方法中改變當(dāng)前的速度、狀態(tài)類型、和動畫:

AIPath.maxSpeed = speed;

enemyState = EnemyState.Tracking;

enemyModel.GetComponent<Animator>().SetBool("walk", true);

?

加上和玩家相互攻擊的邏輯就是一個(gè)小游戲啦。

鏈接:https://pan.baidu.com/share/init?surl=khG-XNnPQIoXBmIj5VejEQ

提取碼:kkm8



~~~分割線~~~

歡迎加入游戲開發(fā)群歡樂攪基:610475807

對游戲開發(fā)感興趣的童鞋可戳這里進(jìn)一步了解:levelpp.com/

【A*Pathfinding】超級簡單的Unity2D尋路的評論 (共 條)

分享到微博請遵守國家法律
蒲江县| 和林格尔县| 天津市| 安陆市| 仁寿县| 凭祥市| 吉安县| 城固县| 乌恰县| 迁安市| 长阳| 洛扎县| 潞西市| 雅江县| 都江堰市| 江油市| 平南县| 贵溪市| 浦县| 凌源市| 盐池县| 镇安县| 化州市| 万年县| 新郑市| 山西省| 育儿| 辰溪县| 务川| 涟源市| 卓资县| 南昌县| 睢宁县| 南城县| 友谊县| 庄河市| 邵阳市| 伊吾县| 无棣县| 靖边县| 根河市|