我們還是調整一下讓他攻勢不要這麼兇猛吧。
我們繼續在Start Firing At那裏的設定,按下滑鼠右鍵加入「新建動作」→「AI」→「Stop Firing」。由於主體是系統產生的Bot,所以Target參數就跟Start Firing At一模一樣就好了。
從Start Firing At 的「Out」拉線出來,連在StopFiring的「In」上。Stop Firing的「Out」連到Start Firing At 的「In」上。
把停止用的機制連上去
讓瞄準的設定從這個位置回來吧
從「Out」的位置上,設定處理這段AI的時間
現在就會0.5秒射擊,然後1.5秒鐘休息,這樣的話就多少減緩了一些攻勢了。
但是1.5秒休息然後0.5秒攻擊這樣的迴圈,即使Bot死掉了依然是會繼續執行,把Bot打死以後畫面就會持續出現警告訊息。此時我們需要加入可以判斷Bot死亡的機制。
Bot死掉以後,攻擊開始及停止的程序一到就會出現黃色的錯誤訊息
我們現在來準備可以表示Bot狀態的變數,Bot產生的時候變數為1,Bot死掉的時候就不為1。這樣的話就可以執行「射擊迴圈如果在Bot狀態不為1的情況下就不會被執行」這樣的判定。
如果各位有看Tutorial Video的話,Bot的數量是在ActorFactory的Spawn Count裡遞增的樣子,在這裡我們想要做一個int(整數)的變量,Pawn(在西洋棋是指卒、兵的意思)如果死掉的話值就會變成-1,並且把值寫回變量裡去。嘗試的做了一下,但是在這裡Spawn Count好像沒有進行遞增的動作,所以我們就把1硬寫進去(雖然這樣子跟Actor連接在一起是沒什麼意義啦....)
雖然從這邊長出變量感覺有點多餘,可是以防萬一還是把整數1加上去吧。
初始值設為1
Bot被破壞之後,變量就要減1。
加減運算的話,「新建動作」→「Math」→「Add Int」就可以執行。條件的判斷的話,「新建條件」→「Comparison」→「Compare Int」就可以對整數進行比較。
問題是,要如何讓Kismet判定Bot的死亡這件事情。
「新建事件」→「Pawn」→「Death」這個事件似乎可以判斷的樣子,總之先接接看再說吧。
用這個功能來判斷Bot是否死亡(應該....)
為了可以使用減法運算,我們把加法運算的kismet加進去
連接判斷Bot死亡的處理
指定要做減法運算的對象
加入要做為減數的變量
把變量值設為-1,這樣就會由加法變成減法
加入判斷是否死亡的判斷式
如果想要把線拆掉重接得話,就要在連接器凸起上面按滑鼠右鍵選擇「斷開連接至」→連接位置
把線重新接到整數比較用的Kismet元件的左邊
另外一邊變量B的地方放入要比較的值(設為0)
最後照上圖連接好後,雖然希望他可以照我們想的方式執行,可是實際上並沒有動作....
光是指定好像沒辦法啟動Death的事件的樣子。而且Death事件也沒辦法指定Target,所以也沒別的辦法。
基本上Kismet在關卡開始製作時會用到的Object,在那個Object自選單點選產生後,那個Object就可以指定成為事件的起始點。而這次的教學,在遊戲開始後動態產生的Object,就需要動態生成Bind變量才行。
被產生的Bot要添加事件的話,須追加下列動作「新建動作」→「Event」→「Attach To Event」,把不知去向的事件撿回來。這裡我們就把Attach To Event的「In」接到Actor Factory的「Finished」上去。
要啟動Pawn的Death判斷事件的話就必須要生成Attach to event事件才行
把Attach to Event 「In」接到Actor Factory的「Finished」上
接下來,「Attachee」的部分跟Bot Object(圓圈內是???那個)連接在一起。然後,從「Event」把線拉出來,接到Death的頭的部分上。連接器接到不是另一個連接器的方式,是我們之前都沒有用過的方法。
從事件原點變量???上把線接到Attachee上
從Event拉出來的線,接到Death事件的頭上,這樣就完成了
稍微一看就可以了解,運算的主要流程是用黑線連接,Object的指定/分配指派是由洋紅 色的線,整數值是用青色的線。紅色的線的話就是事件。整體來看,Kismet東西找的不方便,Debug也很辛苦。特別設計成視覺化程式語言環境感覺好像也意義不大的樣子。
總之,像這樣利用Kismet邊做邊嘗試錯誤的話,某種程度上來說我們也可以讓Bot變的比較聰明一點。但是對於那些覺得者些嘗試很麻煩的人,UDK還是有準備懶人包給他們。
在actorFactory要生成Pawn的時候如果把「Force Death Match AI?」的選項勾選起來的話,Bot就會套用UT3內的死鬥模式AI了。雖然UnrealEngine可以對AI做更細緻範圍更廣的設定,不過在習慣Kismet的邏輯跟用法之前這個是個相當便利的東西阿。
光是指定好像沒辦法啟動Death的事件的樣子。而且Death事件也沒辦法指定Target,所以也沒別的辦法。
回覆刪除-->
不知道為什麼,我設定到這邊,試了一下就可以把BOT殺死了耶!?XD
截圖畫面: http://images.plurk.com/d867acec7cc10237e48740adcb656bbc.jpg