摄像机是游戏中不可缺少的一部分,我们在UE4里制作项目的时候都需要使用到到摄像机。下面为大家分享UE4摄像机中各种情况的处理方法,感兴趣的话可以看一下!
1、摄像机位置
游戏初始化后,PlayerCameraManager会把玩家角色的Pawn设置为ViewTarget,然后获取ViewTarget的坐标作为一个基础值。基础值加上玩家身上的CameraOffset就得到了视点POV的位置。不过这里的CameraOffset是相对于ViewTarget局部坐标系的偏移,还要根据当前的角色的朝向以及Mutiplier来做进一步处理。
如果想让玩家在不同状态下调整不同的视角,可以增加多个CameraOffset(如果射击CameraOffset)。然后在不同的状态下切换不同的CameraOffset即可。
2、摄像机FOV
在很多游戏里面,如果使用弓箭,枪一类的武器,可以进行瞄准。瞄准的实现方法就是修改摄像机的FOV。可以在武器上设置一个OverrideFOV属性,通过在瞄准时更新当前的FOV可以实现瞄准的效果。
3、摄像机震动
我们可以在图中看到继承于UObject的UCameraModifer类,他的作用是对摄像机进行相关的调整,这里我们定义任意的Modify类型来继承于UCameraModifer,或者也可以使用UCameraModifier_CameraShake(即摄像机震动)。
在PlayerCameraManager更新POV信息的时候,或根据条件判断是否调用CamraModifier,在该类中有一个TArrayModifierList;来保存当前所有的Modifier。
同时可以使用UCameraShake类,这个类就是用来设置摄像机震动参数的类,包括震动时间震动幅度等。比如,在UGameplayStatics::PlayWorldCameraShake里面。我们就需要传入一个TSubclassOfShake参数。PlayerController里面也有一个ClientPlayCameraShake方法让客户端去调用,里面也需要传入UCameraShake类型。执行摄像机震动的基本原理就是根据传入的UCameraShake参数来添加一个UCameraModifier_CameraShake。
4、摄像机镜头粒子特效
在PlayerCameraManager类定义中可以看到这样一个属性,通过在摄像机前面绑定一个粒子特效来实现滴血等效果。通过ClientSpawnCameraLensEffect_Implementation可以使用。效果如下
5、摄像机碰撞
摄像机的碰撞逻辑可以写在了PlayerCameraManager的UpdateViewTarget里面(也就是更新视点POV信息的地方),需要在最后做一个盒型的碰撞检测,如果碰到符合通道条件的物体就会更新视点的坐标。
6、摄像机模式切换
PlayerCameraManager里面在更新POV时会判断当前的CameraStyle,从而进行不同的计算,比如我们从第三人称视角切换到第一人称视角,POV相对玩家的位置就会改变(从背后变为眼睛附近)。
7、摄像机后处理
UE4里面的后处理可以通过两种方法完成,第一种是通过在场景里面添加PostProcessVolume,然后摄像机处于该体积内才能产生效果。第二种是在摄像机组件里面添加与设置,这样就不需要把摄像机放在某个特别的位置。
8、摄像机平滑与延迟Lag
在大部分游戏中,为了得到更好的游戏体验,摄像机的移动都是平滑的。因为摄像机是在每帧都进行更新,所以我们只要保持与ViewTarget固定的距离,就可以得到平滑的效果。
但想从当前摄像机立刻切换到另一个摄像机机位的话,或者ViewTarget发生瞬移,可以设置一个插值,让当前的位置逐渐插值到目标位置。如果想做一个摄像机延迟效果,也可以使用类似的方法来实现。
更多文章推荐: