【虚幻引擎】实现惊险闪避触发时停效果
引擎 实现 效果 触发 虚幻 惊险
2023-06-13 09:16:13 时间
效果演示
https://hctra.cn/file/video/avoidTimeStop.mp4
实现思路
惊险闪避触发时机 在敌人攻击动画种,攻击触发前(比如脚踩到地)一小段时间,先开启攻击的检测碰撞,这段时间玩家如果发生触碰同时按下闪避键,就会触发时停效果。
时停效果实现逻辑 先降低游戏时间缩放,然后提高玩家动画播放速率和移动速度,即可实现所有事物变慢,但玩家速度保持不变。
具体实现步骤
惊险闪避触发时机
- 在敌人招式触发前,添加notify通知:
GiantStatusAttack.lua:
-- notify通知触发函数
local notifyBeginFunc = function(name)
if name == GE.MontageNotifyName.CheckAvoid then
own.checkAvoid_ = true
--提前开启碰撞做预警
own["bp_LeftFootForDamageCol"]:SetCollisionProfileName(GE.CollisionSet.ForDamage, true)
elseif name == GE.MontageNotifyName.Release then
--关闭检查
own["bp_LeftFootForDamageCol"]:SetCollisionProfileName(GE.CollisionSet.NoCollision, true)
own:CloseAttack_()
own.checkAvoid_ = false
释放攻击代码...
end
end
GiantMonster.lua:
function cls:DamageColBeginOverlap(overlappedComponent, otherActor, otherComp, otherBodyIndex, bFromSweep, sweepResult)
-- 不是玩家或已碰撞 return
if otherActor.isPlayer_bp == nil or self.attackedActor_[otherActor] then
return
end
self.attackedActor_[otherActor] = true
-- 根据类型发送对应通知
if self.checkAvoid_ then
GD:Post(self, otherActor, GEVT.CHECK_AVOID, true)
else
GD:Post(self, otherActor, GEVT.APPLY_DAMAGE, self, self.aggressivity_bp * self.damageMultipler_, self.impactForce_, false)
end
end
玩家接收到通知,改变相应状态 Character.lua:
function cls:OnCheckAvoid(isCheck)
self.checkAvoidToTimeStop_ = isCheck
end
CharacterStatusAvoid.lua:
-- 触发时停
if own.checkAvoidToTimeStop_ then
own.checkAvoidToTimeStop_ = false
own.isAvoidTimeStop_ = true
local timeScale = 0.3
GF:SetGlobalTimeDilation(timeScale)
own:SetAnimRate_(1 / timeScale)
own:SetMaxWalkSpeed_(own.initMaxSpeed_ / timeScale)
own:DelayCall(3 * timeScale, function()
own.isAvoidTimeStop_ = false
GF:SetGlobalTimeDilation(1)
own:SetAnimRate_(1)
own:SetMaxWalkSpeed_(own.initMaxSpeed_)
own.animRate_bp = 1
end)
end
-- 延迟调用 动画1.3
own:DelayCall(0.7 / own.animRate_bp, function()
if(own.status_ == Enums.Status.Avoid) then
own:ChangeNormalStatus_()
end
end)
相关文章
- 使用Merge存储引擎实现MySQL分表
- 介绍篇 决策引擎环节
- 打造次世代分析型数据库(六):如何从零实现向量化引擎
- mysql之存储引擎 体系结构 查询机制(二)
- Fel实现自定义计算引擎,平均计算速度每秒10w
- MySQL 表类型和存储引擎
- 微信小游戏开发如何选游戏引擎?
- MySQL数据库存储引擎
- 音乐创作引擎实现即时交互体验的探索
- 《Drools7.0.0.Final规则引擎教程》FactHandler使用案例详解编程语言
- Linux内核:构建电脑世界的中心引擎(linux内核有什么用)
- 谷歌新引擎可将深度学习提速 1000 倍:1 个 GPU 几分钟搞定强化学习训练
- Oracle KVM:实现虚拟化的强大引擎(oraclekvm)
- 教你轻松修改MySQL引擎快速实现数据库性能优化(mysql中修改引擎)
- 引擎基于Redis的规则引擎实现与应用(利用redis实现规则)
- 使用TinyButStrong模板引擎来做WEB开发
- 修改Zend引擎实现PHP源码加密的原理及实践