You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity3D第三人称肩视角游戏:攻击时让玩家转向摄像机朝向

解决方案(以Unity引擎为例)

核心逻辑

攻击触发时,优先让角色朝向摄像机的水平注视方向,再执行攻击动作,而非沿用角色当前的移动朝向。

步骤1:获取摄像机的水平前向方向

摄像机的原生前向向量包含垂直分量,需要剔除Y轴,只保留水平平面的朝向:

// 提取摄像机水平前向向量
Vector3 cameraForward = Camera.main.transform.forward;
cameraForward.y = 0; // 忽略垂直方向,避免角色抬头/低头转向
cameraForward.Normalize();

步骤2:计算目标旋转角度

根据水平前向向量,生成角色需要转向的目标旋转值:

Quaternion targetRotation = Quaternion.LookRotation(cameraForward);

步骤3:转向后执行攻击

分两种手感实现转向逻辑:

  • 瞬间转向(适合硬直攻击):直接锁定旋转后触发攻击,保证攻击方向精准
if (Input.GetMouseButtonDown(0)) // 假设攻击键为鼠标左键
{
    // 立刻转向摄像机水平朝向
    transform.rotation = targetRotation;
    // 执行攻击逻辑
    TriggerAttack();
}
  • 平滑转向(适合轻攻击/动作衔接):用插值实现自然转向,到位后触发攻击(或边转边攻击,依手感调整)
public float turnSmoothSpeed = 12f;
private bool isInAttackTurn = false;

void Update()
{
    if (Input.GetMouseButtonDown(0) && !isInAttackTurn)
    {
        isInAttackTurn = true;
    }

    if (isInAttackTurn)
    {
        // 平滑插值到目标旋转
        transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, turnSmoothSpeed * Time.deltaTime);
        
        // 检测是否接近目标角度(误差阈值可自定义)
        if (Quaternion.Angle(transform.rotation, targetRotation) < 1.5f)
        {
            transform.rotation = targetRotation; // 修正到精确角度
            TriggerAttack();
            isInAttackTurn = false;
        }
    }
}

void TriggerAttack()
{
    // 编写攻击逻辑:播放动画、碰撞检测、伤害计算等
}

额外注意点

  • 若角色有独立动画控制器,需确保转向动画与攻击动画过渡自然,避免动作穿模
  • 攻击触发时可临时打断移动转向逻辑,优先执行攻击朝向的旋转
  • 若使用Unreal引擎,逻辑类似:提取Camera的Forward向量并剔除垂直分量,用FRotator::LookAt计算目标旋转,通过AddControllerYawInput或直接设置Actor旋转实现转向

内容的提问来源于stack exchange,提问作者Berkay Ozdemir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:15:30