好久没给大伙儿写文章了,不知道大伙儿有没有想我的。
这次给大家写咱们角色行走的实现方式,这一般是我做游戏第一件实现的功能,我还记得我当年学Unity的时候就是嘎嘣弄了个在走的人之后觉得自己能征服这个世界兴奋不已。当然那时是简单的按上键增加Z轴值,按下键减少Z轴值,按右键增加X轴值,按左键减少X轴值。这对于一般的固定视角角色移动当然是不带半点问题的,空格跳跃增加Y轴值就可以说完美实现了最简单的角色移动代码了。
不过我们的游戏需要转动摄像头来秀我们那么好看的画面,而且我们是有追求的开发者,当然不会止步于此,首先一个最简单的改动就是可以把Z轴和X轴映射到摄像头本地坐标在地面上的投映上,这样子无论玩家将摄像头转到什么角度,上键永远是往屏幕的上方行走。
现在我们的角色就可以在平地走路了,如果我们的地图没有小山坡没有小拱桥的话,那到这儿世界基本上就太平了,可是我们的世界是个三维的空间,这就意味着我们要考虑上下坡的问题,再加之模型都是体素形式制造的,坡这种东西基本就是梯,如果直接往前走要么因为碰撞盒的关系卡着没法前进,要么就是像幽灵一样飘过山河湖海。那么如何让人物按地势平滑地上下移动呢?我的解决方案就是在玩家的正前方从顶上往下射出一条碰撞射线判断前方地势和地貌,通过得到的地势高低以相应的速率增加或减少角色的Y值来实现上桥和下桥的动作,最后如果判断出前方地势高于或低于能行走的高度或者没有碰撞到任何东西或者碰撞到标签为障碍物的物体时,禁止玩家走动即可。
解决到这儿,基本的行走功能要求就完成了,接下来要实现的一个功能,是可以判断出你是否是专业人员的重要指标。这个功能就是令角色在撞墙的时候能够如丝般地滑向想去的方向。这一点很多人一开始都注意不到,因为这个功能在平常玩游戏的时候太自然而然,但实际开发游戏的时候,就发现,假如行走的方向有一堵墙,按照引擎自然的解决办法,就只是卡在墙边无法前行,这种时候要往后退一步才能继续行走,非常的不便。处理方式就是根据玩家按键前进的方向和墙面碰撞的垂直方向的夹角来判断滑动方向,知道滑动方向之后往该方向施加相应的行走速度就可以了。
其他的跑跑跳跳啥的实现起来就不是什么大问题了,有人会说为什么不用Unity自带的CharacterController,它能调玩家行走楼梯的高度,行走跑路实现地也是相当专业,不过我们不用的主要原因还是Unity自带的Script改动起来不太方便,我相信每个游戏对行走都有特殊的要求,不过CharacterController在快速做prototype的时候还是很方便的。
================================================================
如果您对Monsterologist的后续信息和更新感兴趣,欢迎关注我们的微博:
或我们的专栏:纽大游戏故事 知乎专栏
进入Hi-MoE游戏组 | indienova 独立游戏 Hi_Moe小组,注册后也可以讨论或直接和我们互动。
暂无关于此日志的评论。