1. 程式人生 > >[UE4]武器碰撞

[UE4]武器碰撞

icm window 未使用 都是 soc reat 連線 org 需要

轉自: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]武器碰撞