[弹反]用Unity实现弹反效果
作者:佚名 来源:哪吒游戏网 2019-10-26 00:31:05
[弹反]用Unity实现弹反效果,哪吒游戏网给大家带来详细的[弹反]用Unity实现弹反效果介绍,大家可以阅读一下,希望这篇[弹反]用Unity实现弹反效果可以给你带来参考价值。

大渣好。
老贼的黑魂系列,想必大家都乐(tong)在其中。

那么要说到魂系列、乃至很多其他ACT要素浓郁的作品,最核心的机制之一,那就是弹反(视游戏不同叫法也不同,一闪、完美防御、弹开等等)。
实现了这个效果,(理论上)你也可以做一个类似的游戏出来(强调:只是理论上,只是理论上)。

今天我们就用简单粗暴的方法来实现一个弹反。
先看效果图。

图中可知:
这次用的资源是在里免费下的Great Sword Pack和Pro Sword And Shield Pack,需要的可以在工程里边拉或者自行玩法攻略介绍。导入资源后,用Plane和Cube随便搭建一个场地。
由于这是一个简单版的弹反功能实现,因此我们只需要制作两个功能残缺的工具人:一个只会左砍右砍的双刀火鸡哥,一个只能跑和防反的大剑姐。
一、双剑角色
1.功能及动画状态机
双剑角色作为被弹反的工具人,免费包里没有演出效果比较好的动画,最终只好用同一个挥砍动画(Slash)通过调节应用在三个状态中(完美符合乞丐版气息):左砍、右砍(镜像)、被弹反(调节播放速度为负),自己有动画的小伙伴请毫不犹豫地自行替换。

2.实现思路:
(1)在每个动画快结束的时候执行动画帧事件,随机下一个Slash(挥刀)状态,激活对应攻击源,用于判定攻击方向。
(2)Slash时用动画帧事件激活武器上的触发器。
(3)被弹反的时候,调节播放速度AnimaSpeed为负,使其回放。
(4)当被弹反3次时触发BehitBack后仰动画。
3.相关设置
(1)角色设置
以下添加的Collider都勾选IsTrigger。
①给角色添加CapsuleCollider,然后调节至跟角色差不多大小。

②添加RigidBody,并勾选IsKinematic。
③展开角色的骨骼,分别给双剑所在节点加上BoxCollier组件,并且调节至跟剑差不多大小,设置Tag为”EWeapon”,用于格挡时碰撞检测。
④在剑的节点下边新建一个空的物体SwordOri并添加Collider组件,设置Tag”为EWeaponOri”,作为攻击源用于给玩家判定攻击方向。

(2)设置动画
因为需要一个后仰的慢动作,把BehitBack动画的Speed调为0.5。

4.部分功能实现
(1)激活武器的Collider

由于LSlash和RSlash使用的是同一个动画,这里通过获取当前动画状态的名字的方式来判断应该激活哪边的武器Collider弹反,代码(含注释)如下:
//激活武器Collider
public void OnAnimation_OpenSwordCollider()
{
if (beBlock)
{
return;
}
//获取当前动画信息
aniInfo = animator.GetCurrentAnimatorStateInfo(0);
if (aniInfo.IsName("LSlash")) //激活左剑Collider
{
lSwordCollider.enabled = true;
}
else if (aniInfo.IsName("RSlash"))//激活右剑Collider
{
rSwordCollider.enabled = true;
}
}
复制代码
同理,在砍动作结束时添加动画帧事件关闭武器的Collider。
(2)被弹反
这次乞丐版的弹反实际上是Slash动画的回放,所以只要播放速度为负即可,为了提升视觉效果,我们通过动画曲线模拟先快后慢的弹开速度。
①设置动画曲线
在脚本中声明一个变量public AnimationCurve animaSpeed,保存后我们可以在Unity中找到这个变量,点击右侧图框便能编辑曲线。

横轴将作为时间,竖轴将作为播放速度(具体参数按自己喜好调节):

②根据动画曲线调节播放速度

代码(含注释)如下:
//被格挡时触发动作回弹
public IEnumerator BeBlocked()
{
OnAnimation_CloseWeaponCollier(); //关闭武器碰撞盒
beBlock = true;
beBlockCounter += 1; //被弹反次数+1
timer = 0;
while (timer < 0.8f) //弹反动画播放0.8s
{
SetAnimaSpeed();
yield return new WaitForFixedUpdate();
}
beBlock = false;
OnAnimation_RandomAState(); //随机下一个状态
animator.SetFloat("AnimaSpeed", 1); //播放速度恢复正常
}
//设置格挡回弹时的速度
public void SetAnimaSpeed()
{
timer += Time.fixedDeltaTime; //计时
animaSpeed = animaSpeedCur.Evaluate(timer); //读取曲线数据
animator.SetFloat("AnimaSpeed", animaSpeed); //设置播放速度
}
复制代码
二、大剑角色
1.功能及动画状态机
大剑角色具有只有格挡(完美格挡、持续格挡、受击)和移动功能。

2.实现思路:
(1)点击右键,进入PerfectBlock状态,根据敌人攻击来方触发对应的格挡动画。
(2)当在PerfectBlock状态下,敌人的武器碰到格挡Collider时会被弹反。
(3)按住右键进入KeepBlocking状态,持续防御。
(4)当在KeepBlocking状态下,敌人的武器碰到格挡Collider时,玩家被击晃动。
3.相关设置
(1)角色设置
以下添加的Collider都勾选IsTrigger。
①给角色添加Character Controller组件,用于实现移动。
②添加BoxCollider,调节大小与位置,使其位于角色前方,用于探测敌人和判定攻击方向。
总结:以上内容就是针对[弹反]用Unity实现弹反效果详细阐释,如果您觉得有更好的建议可以提供给哪吒游戏网小编,[弹反]用Unity实现弹反效果部分内容转载自互联网,有帮助可以收藏一下。
上一篇: [弹反]弹反和格挡有什么区别?
下一篇: [弹反]云玩家谈谈目前流行游戏里弹反的设定,抛砖引玉欢迎吐槽 NGA玩家社区
- 1 魔兽世界 考古(魔兽世界考古毁一生?这些装备幻化和坐骑值得你去玩考古)
- 2 普罗霍洛夫(卢布危机下俄土豪大甩卖 卖完豪宅卖球队)
- 3 龙之谷手柄(《龙之谷手游》手柄怎么连接 柄连接教学攻略)
- 4 普罗霍洛夫(俄罗斯土豪准备20亿抛售篮网! 最烂老板是怎样炼成的?)
- 5 天联网(天联网信息科技有限公司怎么样?)
- 6 附魔大师(魔兽世界怀旧服附魔大师在哪 附魔大师位置分享介绍)
- 7 wow烹饪食谱(魔兽世界怀旧服烹饪极品食谱)
- 8 陶谦让徐州(陶谦三让徐州,世界上真有这样的好人吗?)
- 9 lol神圣之剑(LOL如果神圣之剑回归,谁最受益?第1:只要不瞎都能上钻石!)
- 10 陶谦让徐州(陶谦三让徐州的原因是什么?)

机械战警
坦克射击
梦道满V版
火箭精英3d免费版
太古灵诀
小小帝国无敌破解版
厉害了我的娃
乐高无限
侠影双剑九游版