码迷,mamicode.com
首页 > 其他好文 > 详细

[UE4]武器碰撞

时间:2017-11-09 20:49:01      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:tor   工程   mat   com   ges   .com   碰撞   trace   系统   

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

标签:tor   工程   mat   com   ges   .com   碰撞   trace   系统   

原文地址:http://www.cnblogs.com/sevenyuan/p/7811111.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!