虚幻引擎中如何通过蓝图让玩家始终面朝指定Actor
蓝图实现玩家角色始终面朝指定Actor方案
适配固定摄像机视角的拳击类游戏需求,全程不用写C++,纯蓝图节点就能实现:
基础瞬时朝向实现
- 先在玩家角色蓝图中新建一个公开的
Actor类型变量,命名为TargetEnemy,在场景初始化时把敌方角色实例赋值给这个变量,不要在帧更新里动态查找敌人,避免不必要的性能消耗 - 找到角色蓝图的Event Tick节点,如果要做性能优化,也可以换成自定义定时器按0.03s间隔触发,人眼完全感知不到延迟
- 分别调用
Get Actor Location节点,一个目标连接自身获取玩家当前世界坐标,另一个目标连接TargetEnemy获取敌方坐标 - 调用
Find Look At Rotation节点,Start引脚输入玩家自身坐标,Target引脚输入敌方坐标,节点会直接输出从玩家位置指向敌人位置的完整旋转值 - 固定摄像机视角下不需要角色俯仰、侧倾,把输出旋转值的
Pitch、Roll两个轴的值强制设为0,只保留Yaw轴的水平旋转值,避免角色出现歪倒、抬头低头的穿模问题 - 把处理完的旋转值传入
Set Actor Rotation节点,目标选玩家自身,就能实现玩家始终面朝敌人的基础效果
手感优化:平滑自然转向
瞬时转向的手感非常生硬,敌人绕侧时转动效果很假,加旋转插值就能适配拳击游戏的跟手需求:
- 不要把计算好的目标旋转直接传给
Set Actor Rotation,先接入RInterp To旋转插值节点 RInterp To的Current引脚接入玩家自身的Get Actor Rotation返回值,也就是当前帧的角色旋转- Target引脚接入之前处理好的、仅保留Yaw轴的目标朝向旋转值
- Delta Time引脚接入Event Tick输出的
Delta Seconds参数 - Interp Speed参数根据想要的手感调整:数值越高转向速度越快,拳击类游戏建议设为8-15,转向跟手的同时不会有突兀的瞬移感
- 最后把
RInterp To输出的插值完成的旋转值传入Set Actor Rotation即可
常见问题排查
- 转向方向完全相反:检查
Find Look At Rotation的Start和Target引脚是不是接反了;如果是角色模型初始朝向和引擎默认正方向不匹配,在最终输出的Yaw值上叠加对应偏移角度(常见为90度或180度)即可,不需要修改模型资产 - 转向时角色上下浮动/歪倒:确认已经把旋转值的Pitch、Roll轴锁为0,固定视角下这两个轴的旋转完全不需要
- 帧更新消耗过高:不要在Tick里用
Get All Actors Of Class之类的节点全场景查找敌人,提前缓存敌人引用即可;也可以把朝向更新频率从每帧改成每2-3帧执行一次,对效果没有任何影响
内容的提问来源于stack exchange,提问作者pontus56
相关产品推荐
相关产品推荐

