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

Unity 2021.1.3f1下自定义第一人称角色移动无法适配相机朝向求助

问题根源

你当前的移动向量计算绑定的是脚本挂载的Player根节点自身的transform朝向,如果你的鼠标视角旋转仅作用在子相机上、没有同步旋转Player根节点的水平朝向,就会出现相机已经转向但移动方向仍和初始世界朝向一致的问题。如果后续直接复用完整的相机朝向计算移动,还会带入俯仰角度带来的Y轴偏移,导致抬头移动时飘向空中、低头时钻入地下。

修复方案

调整移动向量的计算逻辑,基于相机的水平朝向计算移动方向,过滤俯仰带来的Y轴分量,同时对斜向移动的向量做归一化,避免斜走速度比直走快。

修改后的完整脚本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    public CharacterController controller;
    // 新增字段:将场景中第一人称相机的Transform拖入该字段
    public Transform cameraTransform;

    public float speed = 12f;

    void Update()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float z = Input.GetAxisRaw("Vertical");

        // 提取相机的水平朝向,清除Y轴分量过滤俯仰影响
        Vector3 camRight = cameraTransform.right;
        camRight.y = 0;
        Vector3 camForward = cameraTransform.forward;
        camForward.y = 0;

        // 计算移动向量,归一化避免斜向移动速度异常
        Vector3 move = camRight * x + camForward * z;
        move.Normalize();

        controller.Move(move * speed * Time.deltaTime);
    }
}
配置说明
  • 将Player对象下挂载的第一人称相机组件,拖到脚本新增的cameraTransform字段中即可。
  • 该写法适配所有FPS视角旋转逻辑:无论你是把水平旋转绑定在Player根节点还是子相机上,都能正确匹配当前相机的朝向计算移动方向。

内容的提问来源于stack exchange,提问作者Лев Иванцов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 20:15:02