区别一下玩家和角色的概念,玩家是指通过输入设备体验游戏的真实个体,而角色则是指游戏世界中被操纵的虚拟个体。
POV原是一种电影拍摄的模式,指的是镜头相当于叙事主体的眼睛,所有被摄的内容看上去都是在以主体人的眼睛所看到的内容。
正因如此,在Play之后,游戏默认展示的画面是角色身上所挂摄像机的渲染内容,而不是其他摄像机。
值得注意的是,如果设置了平滑切换,那么APlayerCameraManager并不会直接更新ViewTarget.Target,而是将其设置到PendingViewTarget.Target中,等待平滑切换结束之后再将其设置为ViewTarget.Target。
APawn在被AController调用Possess方法控制时,会调用PossessedBy方法将自身的PlayerState设置成Controller的PlayerState。因此,无论玩家切换到哪个控制的角色,都可以通过PlayerState快速找到当前控制的APawn。
从这里可以看到,UCameraComponent里并没有渲染逻辑,其主要功能是为APlayerCameraManager提供POV数据;
UE默认提供了以下五种,可以根据需要额外新增,并添加相应的POV数据计算逻辑;
BlueprintUpdateCamera方法是可以在蓝图中自定义实现的接口,可以直接覆盖相机的表现;
默认情况下,将会遍历所有Attach在AActor上的UCameraComponent,然后找到第一个激活的UCameraComponent调用其GetCameraView方法获取POV数据。如果找不到符合条件的UCameraComponent,那么将会直接调GetActorEyesViewPoint方法提供玩家观察的位置的朝向; 因此,如果AActor上有多个UCameraComponent,可以通过设置UCameraComponent激活(不激活)来实现切换摄像机的功能。
APlayerCameraManager允许动态增加、删除UCameraModifier,且多个UCameraModifier可以同时生效;
小Tips: 如果还记得3.2 更新POV的内容,那么就知道UWorld的每次Tick最终都会调用当前正在使用的UCameraComponent的GetCameraView方法。 因此,如果勾选了UCameraComponent的bUsePawnControlRotation,那么所有针对该UCameraComponent的Rotation修改逻辑都不会生效,因为GetCameraView方法会强制将其Rotation覆盖为APlayerController的ControlRotation。
如果需要使用USpringArmComponent控制UCameraComponent的旋转,那么一定要确保将UCameraComponent的bUsePawnControlRotation设置为false,原因可以见4.2 摄像机的旋转控制。
影响范围最大的方式。通常推荐用于切换不同的镜头表现逻辑时使用,如从移动时的跟随镜头切换到处决时的特写镜头等;
影响范围最小的方式。通常推荐于UCameraComponent的位置和朝向有额外修改需求时使用,如在加速时缩短角色与摄像机的距离等;
影响范围较大的方式。与修改UCameraComponent的位置和朝向最大的区别在于,修改UCameraComponent的位置和朝向通常只会针对某些特定的角色生效,而自定义UCameraModifier则在所有情况下都会生效;
您需要 登录 才可以下载或查看,没有账号?立即注册
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )
GMT+8, 2024-11-21 21:36 , Processed in 0.090578 second(s), 26 queries .
Powered by Discuz! X3.5 Licensed
© 2001-2024 Discuz! Team.