碰撞命中组件:UltimateCollisionComponent
用途:用于武器、玩家、发射体命中碰撞检测
命中检测类型(ECollistionType):例如:左手、右手、右脚、右手武器、尾巴等,随后在OnSetupCollistionSocket通知中设置具体组件与插槽
命中请在动画蒙太奇中添加动画通知状态ANS_HitBox来开启命中碰撞检测
变量 | 说明 |
---|---|
CollisionHandles(未公开) | 开启的所有碰撞句柄 |
CollisionSavedData(未公开) | 碰撞保存数据,调用OpenHitCollision开启碰撞时,会先保存一份数据,随后调用OnSetupCollistionSocket设置插槽时会使用该数据 |
bCollisionTrace(未公开) | 是否开启碰撞检查,当碰撞句柄列表为空时关闭 |
bAllowTrace(未公开) | 是否允许检查,初始开启的第一帧由于只有一个坐标无法进行检查,用于等待到第二帧开始检查 |
SocketLocationMaps(未公开) | 储存的插槽坐标,当bCollisionTrace为true时检查完毕后更新 |
HitDatas(未公开) | 命中数据,用于单个句柄的Actor命中储存,避免多次命中 |
GroupHitDatas(未公开) | 分组命中数据,用于分组的Actor命中储存,避免多次命中 |
CollistionSockets | 碰撞插槽,调用AddCollistionSocket进行添加 |
CollisionQueryTypes(设置) | 检查碰撞类型 |
IgnoredCollisionProfileNames(设置) | 无视的碰撞描述名 |
IgnoredClasses(设置) | 无视的Class |
TraceRadius(设置) | 检查的半径 |
bEnableTraceDebug(设置) | 显示debug |
函数 | 说明 |
CreateHandle(未公开) | 创建碰撞句柄 |
CloseHandle(int32 Handle)(未公开) | 关闭碰撞句柄,将会移除对应的插槽与命中数据 |
GetHandleCounter(未公开) | 获取碰撞句柄数量 |
RemoveCollistionSocket(int32 Handle)(未公开) | 移除碰撞插槽 |
AddCollistionSocket(UPrimitiveComponent* Component,const TArray<FName>& SocketNames) | 添加碰撞插槽,在事件分发器OnSetupCollistionSocket中调用 |
OpenHitCollision(ECollistionType CollistionType, FName DamageGroup,float DamageMultiplication, bool bHitFreezeFrame) | 开启命中碰撞检测,一般由动画通知状态 UANS_HitBox开启时调用 |
CloseHitCollision(int32 Handle,FName DamageGroup) | 关闭命中碰撞检测一般由动画通知状态 UANS_HitBox结束时调用 |
CloseAllHitCollision | 关闭所有碰撞句柄,死亡时调用,在APrimalCharacter::OnDeath已调用 |
GetIsIgnoreClass(UClass* ActorClass) | 是否为无视的Class |
GetUniqueSocketName(UPrimitiveComponent* Component, FName SocketName) | 获取唯一插槽名,用于识别储存的插槽坐标 |
GetHitActors(int32 Handle, FName DamageGroup) | 获取已命中的实体列表 |
CreateGroupHitData(FName DamageGroup)(未公开) | 创建分组命中数据 |
RemoveGroupHitData(FName DamageGroup)(未公开) | 移除分组命中数据 |
AddHitData(int32 Handle, FName DamageGroup, AActor* HitActor)(未公开) | 添加命中数据,由TraceHit命中后调用 |
RemoveHitData(int32 Handle,FName DamageGroup)(未公开) | 移除命中数据 |
TraceHit(未公开) | 碰撞命中检查 |
UpdateSocket(FCollistionSocket CollistionSocket) | 更新单个插槽位置 |
UpdateAllSocket | 更新所有插槽位置 |
事件分发器 | 说明 |
OnHit(FHitResult HitResult,float DamageMultiplication, bool FreezeFrame) | 命中事件,在此实现伤害、效果等 |
OnSetupCollistionSocket(int32 Handle, ECollistionType CollistionType,bool bHitFreezeFrame) | 设置碰撞插槽事件,开启命中碰撞检测时调用,在此调用AddCollistionSocket来设置碰撞插槽 |
ANS_HitBox:开启命中碰撞检测
变量 | 说明 |
---|---|
CollistionHandle(未公开 ) | 碰撞句柄 |
CollistionType | 碰撞类型,随后在OnSetupCollistionSocket中调用AddCollistionSocket来设置碰撞插槽 |
bHitFreezeFrame | 是否开启卡帧,命中后进行卡帧,卡帧效果需自行在OnHit中实现 |
DamageGroup | 伤害分组,用于几个命中碰撞检测通知使用同一个命中数据,避免对玩家造成多段伤害,其中设置了引用计数 如命中碰撞检测通知不连续,则需添加一个DamageMultiplication为0的用于引用的命中碰撞通知(不会进行检查,但会让命中数据继续存在),当引用为0时将会移除对应的分组命中数据 |
DamageMultiplication | 伤害倍率,同于调节同一个蒙太奇多个伤害分段,例如初始出刀速度慢,仅造成0.7倍伤害 |