UE5中如何修改Lyra相机实现Top Down俯视角游戏
Lyra 类《Battlerite》俯视角跟随相机实操指南
CM_ArenaFramingCamera固定机位逻辑与跟随改造
CM_ArenaFramingCamera默认不跟随玩家的核心原因是其设计目标为竞技场全局观影视角,原生逻辑绑定竞技场场景中心点作为视口锚点,内置多玩家自动框选算法,会动态调整焦距和位置把所有场内玩家纳入视口范围,没有绑定单个玩家的跟随逻辑。
改造步骤:
- 重写
ULyraCameraMode_ArenaFraming的UpdateView虚函数,将原逻辑中获取全局ArenaCenter作为锚点的逻辑,替换为获取当前玩家控制器绑定的Pawn坐标作为跟随锚点,保留原有的平滑插值参数不要删除,避免跟随时出现生硬跳变 - 将相机模式配置中的
bAutoFrameAllPlayers布尔值设为false,关闭多单位自动框选逻辑,避免其他玩家位置拉扯相机偏移 - 固定视角俯仰角:将默认控制旋转的Pitch值锁定在-65°~-75°区间(匹配Battlerite的俯角观感),Yaw旋转绑定玩家控制器的控制旋转,不要绑定Pawn的Actor旋转,避免角色释放技能转身时相机同步乱转
CM_ThirdPerson改俯视角的旋转异常修复
之前改造第三人称相机出现旋转回弹、角度锁死、位置跳变的核心原因是:CM_ThirdPerson的旋转逻辑由弹簧臂组件旋转继承、距离-旋转曲线、碰撞避让三个模块共同驱动,仅调整位置曲线没有同步修改这三个模块的配置,就会出现参数冲突。
修复操作:
- 打开CM_ThirdPerson对应的相机数据资产,找到
ThirdPersonCameraRotation曲线组,将Pitch曲线的取值下限从默认的-30°调整为你需要的俯角值(比如-70°),把所有曲线输入节点的输出值打平为固定值,删除随移动速度、相机距离变化的旋转偏移逻辑 - 选中相机挂载的弹簧臂组件,将
bUsePawnControlRotation设为false,三个旋转继承开关仅保留bInheritYaw开启,关闭Pitch、Roll的旋转继承,避免角色动画、根运动带歪相机角度 - 将弹簧臂的
ProbeSize设为0,关闭碰撞检测拉回逻辑:俯视角相机不需要做场景碰撞避让,否则头顶有遮挡物时相机会自动拉到角色近点,出现视角突然贴脸的异常
相机系统与Ability系统联动规则
所有联动逻辑不要直接在Ability里硬改相机Transform,否则会被Lyra每帧的相机更新流程覆盖,还会触发网络位置回滚,标准联动规则如下:
- 所有技能触发的相机效果(突进拉远、大招特写、受击震屏、视角锁定)都要派生
ULyraCameraModifier子类实现,通过GAS Ability里的ApplyCameraModifier节点挂载,Modifier自带优先级和生命周期管理,技能结束自动回收,不会污染基础相机逻辑 - 优先级对齐规则:自定义基础俯视角相机优先级设为0,普通技能的相机效果优先级设为10~50,大招、处决类强制镜头优先级设为100以上,高优先级效果会按权重叠加/覆盖低优先级参数,和GAS的Ability优先级判定逻辑完全一致
- 网络同步规则:相机Modifier仅需要在客户端挂载,不要把相机效果做成RPC同步,利用Lyra自带的Ability预测逻辑即可实现无延迟的镜头反馈
自定义俯视角相机的标准创建流程
不建议直接改造现有ArenaFraming或ThirdPerson相机模式,冗余逻辑太多容易出bug,从基类派生自定义相机是最稳定的方案:
- 从
ULyraCameraMode基类派生自定义类ULyraCameraMode_TopDownArena - 在类中暴露三个可配置参数:
FixedPitchAngle(默认-70°)、CameraHeightOffset(默认1200单位,按项目单位尺度调整)、FollowSmoothSpeed(默认8,数值越大跟随越平滑) - 重写
UpdateView虚函数,核心实现参考:
void ULyraCameraMode_TopDownArena::UpdateView(float DeltaTime) { Super::UpdateView(DeltaTime); APawn* TargetPawn = GetTargetPawn(); if (!TargetPawn) return; // 平滑计算跟随锚点 const FVector TargetPivot = TargetPawn->GetActorLocation(); CurrentPivot = FMath::VInterpTo(CurrentPivot, TargetPivot, DeltaTime, FollowSmoothSpeed); // 计算固定俯视角旋转与位置 const FRotator CameraRot(FixedPitchAngle, GetTargetController()->GetControlRotation().Yaw, 0.f); const float HorizontalOffset = CameraHeightOffset / FMath::Tan(FMath::DegreesToRadians(-FixedPitchAngle)); const FVector CameraPos = CurrentPivot + CameraRot.RotateVector(FVector(-HorizontalOffset, 0.f, CameraHeightOffset)); // 写入最终视图参数 View.Location = CameraPos; View.Rotation = CameraRot; View.DesiredFOV = 88.f; // 匹配Battlerite默认FOV }
- 打开项目对应的Experience游戏模式资产,将默认相机模式替换为新建的
TopDownArena相机模式,进游戏测试即可,不会出现改造旧相机时的旋转、位置异常问题。
内容的提问来源于stack exchange,提问作者ocg1
相关产品推荐
相关产品推荐

