在Unity3D中开发射击游戏的一些思路(2)

我们在制作FPS游戏中,经常遇到的一个情况是:穿模。穿模是一个亘古不变的难题,可以说至今没有一个很不错的解决方式,但是现在有以下几种解决方式是比较受欢迎的。

1.使用子摄像机单独渲染手臂,这也是我们会主要讨论的方法

2.在贴近墙时,播放垂下枪的动画使枪与身体平行,这样模型就不会穿墙,一般配合第一种方法使用效果更佳,这种方法是目前看来最为完美的一种解决方法,然而,这种方法需要美术人员的动画设计以及美工人员的多次调参,工程量较大,这种方案在制作成本较低的独立游戏时并不是首选方案。

首先我们搭建一个简单的示例场景,使用一个细长的方块代替枪位置,模拟了一个穿墙效果:

在Unity3D中开发射击游戏的一些思路(2)_第1张图片在Unity3D中开发射击游戏的一些思路(2)_第2张图片

这时添加一个子摄像机,并挂载到主摄像机下,将Clear Flags改为Depth only并将Depth提高10:

在Unity3D中开发射击游戏的一些思路(2)_第3张图片

可以看到,方块的渲染已经完整了,只不过阴影光照等会出现问题,在使命召唤,战地等FPS大作中,角色靠近墙枪的阴影会变黑或者变亮,就是因为错位穿透导致的光照计算错误。因此部分游戏就引入了在贴近墙时播放枪下垂的办法,可以通过Physics.SphereCast这个方法来判断枪前方是否有墙壁并切换动画的播放:

https://docs.unity3d.com/ScriptReference/Physics.SphereCast.html

通过发射一个从枪托到枪口方向的SphereCast,判断枪口是否有撞到墙,注意在执行判断的同时,要确保场景中枪械,玩家身体与其他物体分别处于不同层,这样才可以避免出现射线与枪本身或第一人称角色控制器本身碰撞出现鬼畜的情况,同时也会避免出现在近战时射线碰撞到敌人身上自动收枪然后“礼貌”的被敌人打死的尴尬情况。

你可能感兴趣的:(在Unity3D中开发射击游戏的一些思路(2))