星期五, 3月 26, 2010

[UDK教學] [第十三章] 讓地圖出現BOT!!

之前部分的教學,都是只做在遊戲內使用的場景而已。若光是這樣還是不能成為一款遊戲。由於我們目前玩家角色行走跟射擊都已經先內建好了,剩下的就是讓敵人出現的話,就能成為最低限度的FPS遊戲了。

UnrealEngine在遊戲裡具備了各式各樣的AI角色(也就是Bot),已經做好最基本設定的Bot已經準備好了。

先使用遊戲內的Bot試試看吧。詳細的步驟可以直接上官方網站看教學影片,可以看Top Down Game這個項目裡第19項影片以下的部分,由於稍微有點複雜,我們這裡就簡明扼要的說重點。在最低限度處理的型況下讓一個敵人可以進行攻擊行為。

只有放地板及平行光源就是一個簡單的場景了


接下來打開內容瀏覽器,上面有個「Actor類別」的標籤,看到了就按下去。下面的畫面就切換到會換成所有Actor的樹狀一覽表。在這裡在有標示「Note」的地方按一下,把它選起來。


回到Unreal Editor,在場景上適當的位置按滑鼠右鍵,選擇「把Note添加到此」,如果沒有的話就選「添加最近使用的物體」→「添加Note」。在畫面上就會出現一個像是筆記本一樣的綠色圖被放在地上。所謂Note就是記錄該點位置,以便到時候其他的功能可以利用這裡的位置資料。

這個時候有一個要注意的地方。請別把Note埋到地板下或者是其他物體裡面。實際在執行的時候會發生警告訊息,然後Bot就不會出現。


設置Note在地面上。另外,像這樣直接放著的狀態有可能會陷到地面下去,在把Note拉上來一點會比較好。

維持現在的狀態(Note被選擇下),最上面的工具列有個「K」連著一個箭頭的圖示,按下去後會把Kismat打開。所謂Kismet就是Unreal Engine 把程式運算的流程用圖像表現的視覺化程式語言環境。「Kismet」這個詞彙的意思即是伊斯蘭語裡「命運」的意思。


Kismat視窗裡按下滑鼠右鍵,有一項「新建對象變量使用Note_0」會出現在迸現選單裡,選擇它以後,這樣Kismet上就可以使用Note_0的位置資訊了。


接下來,我們就要來製作之後要進行運算的啟動條件設定。
按右鍵選「新建事件」→「Level Loaded」。


再來在別的空的地方按滑鼠右鍵,選擇「新建動作」→「Actor」→「ActorFactory」。ActorFactory是遊戲在執行的時候,可以替Actor追加動作的功能。


畫面出現的任何圖形,壓著Ctrl鍵就可以自由操作每個圖型的位置,請照著圖片參考放置的位置吧。


從這裡開始要用Kismet設定「做好的場景要載到PC裡,遊戲啟動後新的Actor作為敵方NPC從Note_0的位置生出來」。
從Level Loaded的「Beginning Level」的突起拉出來,接到Actor Factory的Spawn Actor的凸起部分去。
然後再從ACtorFactory的「Spawn Point」的突起部分開始,拉線接到先前設好的Note_0上。


接下來就是最重要的ActorFactory設定的部分。選擇ActorFactory起來的時候下面會出現參數設定的部分,注意到Factory的地方。「None」的意思是什麼都沒設定,所以我們要先把想要產生的Actor指定進去。右邊有的藍色的三角型壓下去後就會出現可以指定的Actor。裡面有一個「UTActorFactoryAI」把它選起來。


再來在Factory左邊有一個黑色橫三角點一下,就會出現更詳細的設定參數,在Pawn Class上選擇UTPawn,然後勾選在上面的Give Default Inventory,點選Inventory List右邊綠色的+標誌,會增加使用物品的設定,把下拉選單打開選取UTWeap_LinkGun。





讓各位久等了。以目前的狀態就可以執行「從這裡開始播放」看看,如果畫面裡出現了一個拿著武器的Bot得話就是成功了。如果有出現Error訊息的話,就要檢查看看Note是不是被埋到地底去了。


Kismet 包含了下列數項要素。

  • 事件:在什麼樣的條件下啟動運算
  • 動作:實際執行的內容
  • 條件:對於執行內容的判斷
  • Matinee:Unreal的Animation管理系統(容後再介紹)
  • 變量:在進行運算時用來乘載數值及傳遞數值
  • Object:Actor及運算中的複雜變數等等


Kismet的運算一定是從事件開始,由於動作與Object緊密不分,要指定哪個Object的動作就要用「Target」。Kismet運算的流程跟資料的流動是用顏色不同的線連結再一起。運算跟比較的話,需要A跟B兩種類的變量才行。

如果可以了解什麼樣的條件才能呼叫,以及要下給它什麼樣的動作的話,連FPS以外的簡單遊戲也有可能做得出來。

2 則留言:

如果您對於此篇文章有意見、問題、想法、或者是吐槽格主寫的太爛,都可以寫在這個地方告訴格主喔:D:D