攻擊在不同部位傷害應該是不一樣的,比如把人分為 頭、胸、腹、胳膊腿等。
之前做了一個簡易的判斷,只是判斷是否打在了頭上,這次用宏全做出來。
噴血
首先判斷是否打在了胳膊上。輸入的name變量是骨骼名稱。
找到AI的骨骼,找到手臂骨骼的名稱s。(手指就不算了,大臂、小臂、手)
把這幾個都判斷一下
復制一份,做腿的
先找腿的骨骼名稱
復制之后修改里面的骨骼名
再來一個重要部位檢測(包括頭、脖子、脊柱01 02、屁股)
把后面的播放受擊動畫合成為一個宏或者函數
記得在輸入里面添加一個exec。
把骨骼名稱和攻擊方向提升為變量,方便操作
測試,沒有問題
新建一個關於傷害計算和噴血部位的函數,take damage
bone name 傳入骨骼名稱,用於判斷出血位置
damage 傷害量
damage X 傷害倍數
右鍵輸入math,可以自定義一個數學公式,直接在名稱里輸入就行。
比如我們修改公式的名稱為A*B,打開該公式就是這樣的
新建兩個變量,護甲AP和血量HP。
計算方式,借鑒lol的傷害計算公式,實際傷害=面板傷害*(100/100+實際護甲)。
實際護甲=面板護甲*(1-護甲穿透百分比)-實際穿甲值。
當然先不做穿甲的事,先只考慮傷害和護甲值。至於穿甲、暴擊bulabula 以后有空在做。
所以,HP=HP-Damage*(100/100+AP)
然后播放噴血動畫
用 spawn emitter attached
骨骼就是我們輸入的骨骼,mesh就是從左上角拖出來的mesh,emitter template 拖到輸入里,在外面改。
以攻擊手臂為例
這是要添加的噴血動畫
大概是這樣,感覺噴血量有點多
然后就是調整出血的動畫,也可以跟之前一樣用一個 隨機的布爾值進行select
多試試看哪個效果好,沒啥好說的
然后加上AI往后退的動畫,直接加在take damage后面就行。
做了一點調整,把damage*damage X直接輸入了Play Damage Anim,作為判斷是否是重擊的傷害量
死亡與肢解
死亡
比較HP與0,如果大於0正常播放,小於等於0就先播放受擊動畫,再返回一個布爾值,代表死亡。
如果 is dead 為true ,在隨機0.2-0.7s的延遲后,開啟“布娃娃” 物理模擬。
“布娃娃”就是系統模擬的,帶物理重力的一個東西,比如下面這個攤在地上,其實就是因為AI模型本身的重力導致的。
受擊動畫的進一步修改,加入持續流血的效果
如果傷害>=80,播放被擊倒的動畫,必定流血
如果傷害<80,>=40,有幾率流血
用event tick檢測,如果在流血,就播放持續流血的動畫
5s之內沒有受到傷害,就停止流血。
斷肢
也可以用個隨機布爾值,做概率斷肢