做坦克射擊的遊戲,怎麼樣能讓AI打的不那麼准?
01-13
我學的是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 的差別很大嗎?