做坦克射擊的遊戲,怎麼樣能讓AI打的不那麼准?

我學的是C#。

在坦克前面加了一個cube做子彈發射的容器。當玩家進入作戰區域,AI鎖定玩家坐標開過,這樣百發百中。

嘗試過在AI確定玩家位置的時候加入隨機範圍,但這樣炮台會跟著亂轉(因為cube建在炮台列表裡)。

現在唯一能想到的是不把建在坦克列表裡,而是放在坦列表克外,給cube添個腳本:當坦克移動的時候,cube跟隨移動,這樣炮台可能就不會亂轉了(沒試過)。

但是如果坦克多了的話,這樣做很麻煩,請問有沒有什麼好的辦法,解決這個問題?

剛學unity不到一個月,可能對問題的表述有些混亂,大家見諒。


100% 命中,80% 生效(播放特效動畫、結算傷害)


你可以嘗試降低子彈的速度。

其實你不是需要AI打不準,而是需要給玩家躲的機會。


一般比較合理解決這類問題的辦法,都是在進行建模的時候多弄幾個參數,然後在進行判斷AI命中的時候,進行隨機偏移。

比如假設這個遊戲里坦克的射擊分為「索敵」-「校準」-「發射」-「判定」這四個環節,那麼假設駕駛的都是二戰時期的坦克,也就是沒有雷達啥的,則設想玩家是通過切換觀察組員來完成索敵,然則可以為AI設定一個索敵區域,這個區域基本和測試中玩家能夠覆蓋的索敵區域差不多,然後為這個區域設定概率分布,比如(X+N+T*K)%,X是每個劃分區域的基礎索敵概率,N是隨機量,T是目標進入索敵區域總時間長度,K是單位時間長度增加的索敵成功概率。

然後說校準-發射,假設這個遊戲是採用瞄具直瞄的方式來發射火炮,那麼同樣可以參考玩家在測試中的表現,在火炮射程區域和可能索敵區域的交集中,劃分設計命中率區域,當然,其參數和公式要變,如res=X+B*K1*+T*K2+N,其中X是不同射擊區域的命中常數,B是布爾值表明坦克是否行進,K1為負常數(可以通過坦克型號或其他數值修正),T是這輛坦克向同一目標的發射次數,K2是正常數(設想正常情況下,你總是越打越准吧),N是隨機值。

判定簡單了,如果考慮裝甲,就弄個方法計算下命中時的彈著角度和車輛方向,不考慮直接用車輛行進速度為修正值生成一個一定範圍內的隨機數,然後和上文得出的RES去比較就完了。

這麼一弄,基本不可能出現AI發發命中,而且也更真實合理。


這個功能我也做過,個人的解決方法是隨機偏移角度

設定AI的命中率以及最大偏移角度

以AI發射點到目標點為參考線,每次發射的時候根據命中率來決定是否偏移角度就行了。


讓它正常發射中,隨機數來控制不生成彈道效果,不結算傷害。


加風偏


用彈幕,固定模式,玩家自然能有躲得機會了!


只在開火的前一瞬間取隨機


我覺得最簡單的辦法可能就是附加一個固定的時間偏移量,就是故意讓AI反應慢半拍


推薦閱讀:

.net沒落了嗎?
如何閱讀CLR via C#?
如何評價 ASP.NET vNext?
C#的前景怎麼樣? 真的沒落了嗎?
CoreCLR 和 CLR 的差別很大嗎?

TAG:Unity遊戲引擎 | C# |