天天看点

解决人影模糊和完善跳墙(WallJump)体验—unity角色控制器(1)

作者:乌云来了libilibi

A:封面是Bug!

B:不!那是铁山靠!

注:这是学习unity教程时自己的一些想法,可能实验的方向都很蠢笨,大家有什么想法可以告诉我。

教程地址:BV1ot4y1478z

Q1:人影模糊

在角色的移动过程中,我们可能会发现移动中的角色会出现模糊的效果,具体的效果类似这样(截图和录屏体现能很好体现模糊的效果,可能跟录屏的方式有关):

解决人影模糊和完善跳墙(WallJump)体验—unity角色控制器(1)

当然程度要轻缓很多啦

其实这里可能是摄像头的Update方式与角色控制器脚本的Update方式不一致的问题。我们只需要修改Cineamachine Brian中的Update方式修改为与脚本相同即可,因为我的脚本中使用的是fixedUpdate来改变运动,所以我可以将camera的Update方式更改为fixedUpdate。

解决人影模糊和完善跳墙(WallJump)体验—unity角色控制器(1)

记得点击Fixed Update哦

这样的显示效果就好很多啦!

Q2:完善WallJump体验

教程中的跳墙和拐角攀爬是利用射线检测进行的。

解决人影模糊和完善跳墙(WallJump)体验—unity角色控制器(1)

在墙上

解决人影模糊和完善跳墙(WallJump)体验—unity角色控制器(1)

拐角攀爬

解决人影模糊和完善跳墙(WallJump)体验—unity角色控制器(1)

射线样式

如图所示我们有两条射线,我们将上面的射线命名为ray1,中间的射线命名为ray2。

当我们的ray1和ray2同时检测到墙体或者仅有ray1检测到墙体时(并且满足一些其他条件),我们认为角色仍然挂在墙上;而当检测不到ray1但是能检测的到ray2时,我们认为角色有一部分挂在墙上但是快要爬出来了,这时候执行拐角攀爬。

这个逻辑看起来似乎可以,当然事实上确实能执行一部分效果,但是当角色的下半部分,也就是没有射线的这部分接触墙体时,

解决人影模糊和完善跳墙(WallJump)体验—unity角色控制器(1)

空缺区域

这时候我们检测不到接触墙体的指令,这时候有两种情况,一种是角色在地上,但是角色仍有可能在空中,这时候被识别的状态就是跳跃,但是由于摩擦力被卡在墙上,比较难办。

解决人影模糊和完善跳墙(WallJump)体验—unity角色控制器(1)

铁山靠能卡在墙上是一件很正常的事!

那这时候就有小伙伴就要问了,为什么不把ray2移到下面呢,嗯……只能说会有非常奇妙的效果。

最后,为了解决这个问题,我实验了许多,最终确定了两个方法,一是修改碰撞体的摩擦力,二是修改代码的一些逻辑。

方法一:

第一种方法是观看麦扣老师视频时候学会的小寄巧,在这里我想,如果让角色的一部分有摩擦力,另一部分没有该多好,所以我们给角色再加一个盒子碰撞体。组合的情况如图:

解决人影模糊和完善跳墙(WallJump)体验—unity角色控制器(1)

碰撞体的改变

然后我们给上半部分的盒子碰撞体加一个材质,让其摩擦力为0,而且下半部分的是一个弧形结构,这样就可以让角色在那种情况下顺利下滑。但是……虽然解决了一部分问题,但是又有了一些奇妙的效果,因为有了摩擦力为0这样一个异端,跳墙的时候如果你掌握的够好,可以营造一种贴着墙面飞行的感觉,而且底下的那个胶囊碰撞体有时候也会卡住。

方法二:

下面就是方法二,给代码增加逻辑,我们希望给角色来一个全身的检测,于是不仅仅只有头顶有射线,脚底也要有另一条射线。就叫它ray3。

解决人影模糊和完善跳墙(WallJump)体验—unity角色控制器(1)

新增加的射线

然后我们可以借此修改在墙上的条件,除却上半部分提到的,我们增加了判断条件当只有ray3接触墙壁,且不在地面上时,同样设置为滑墙状态,但是因为角色“腾不出手”,只能缓缓下落一段时间,然后再修改一下动画的运行条件,就大功告成了(我相信小伙伴们可以自行修改自己的代码的!)