[UE4]武器碰撞
轉自:https://www.cnblogs.com/corgi/p/5405454.html
實現武器戰鬥傷害系統,擊中時如何發出碰撞事件產生傷害,目前探索的有通過物理碰撞和LineTrace兩種方法。
物理碰撞通過Overlap事件的方法,優點是易於實現,缺點是無法具體到碰撞骨骼位置,低幀數或者武器高頻運動時可能無法產生Overlap事件。
LineTrace通過指定武器傷害區域,形成線段跟蹤,獲得與射線交叉的骨骼位置。優點是可具體獲得骨骼位置,低幀數也可獲得一定效果。缺點是需要具體指定Socket位置,若被碰撞骨骼過小,可能會穿過導致不準確的結果。
一、Overlap方法
當武器和敵人重合時,發出Overlap事件,獲得碰撞到的敵人。
1.屬性設置
武器碰撞體積設置。
碰撞Channel設置,武器自身類型設為WorldDynamic,碰撞對象類型設置Overlap Pawn,剩下的都Igonre即可。敵人自身類型設為Pawn,碰撞類型修改Overlap WorldDynamic。
註意:Root的碰撞Channel設置會影響child actor的碰撞檢測。比如root忽略了pawn,child都不會檢測到pawn的碰撞事件。
把武器的Generate Overlap Event設置為false,攻擊過程設為true。
當攻擊動作播放時,通過AnimNotiy在AnimationBP中發送設置攻擊狀態變量的消息
在Character的藍圖中獲得事件根據變量改變Generate Oberlap Event的值。
2.造成傷害藍圖
3.最終效果
二、LineTrace
在武器上指定若幹socket,攻擊時記錄每一個socket的位置,下一幀時各socket與上一幀對應位置連線,該線段作為LineTrace的線段,檢測交叉到的物體。
1.屬性設置
指定武器的Socket位置,在武器的StaticMeshEditor中,Window->Socket Manager,Create Socket,創建若幹Socket並拖到合適位置。註意Socket間距不要太大,否則可能導致被擊骨骼在Socket間隙未被碰撞。
碰撞Channel設置,雙方Ignore或者Overlap對方均可。
2.造成傷害藍圖
3.最終效果
類似於這個效果。從網上找的圖,自己工程有些問題無法打開。
三、OnHit方法
Hit事件僅發生在碰撞雙方都是Block對方類型,可獲得Hit的法向、骨骼等具體信息。但角色攻擊時,武器經過敵人物理體內部時,Block會導致敵人在物理碰撞系統的影響下彈飛。所以應適用於遠程碰撞爆炸等效果,在此處未使用。
[UE4]武器碰撞