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

Unity中武器朝向鼠标旋转时长度异常变化的问题求助

问题原因与解决方法

问题根源

你遇到的武器“长度忽长忽短”问题,本质是鼠标位置转换到世界空间时Z坐标不匹配:
Camera.main.ScreenToWorldPoint(Input.mousePosition)使用的Input.mousePosition只有屏幕XY坐标,Z值默认是0。如果你的武器和相机不在同一Z平面,转换出的mouseP会和武器的Z坐标有偏差,导致计算的方向向量包含Z轴分量。虽然你强制绕Z轴旋转,但武器实际朝向的是3D空间中的点,在透视投影下就会出现视觉上的缩放错觉(近大远小导致的视觉变形)。

修复步骤

1. 对齐鼠标位置的Z坐标

确保转换后的鼠标位置和武器在同一Z平面,根据相机类型选择对应方法:

正交相机场景

直接强制鼠标位置的Z坐标与武器一致:

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

public class Rotation : MonoBehaviour
{
    private Vector3 mouseP;       
    void Update()
    {
        mouseP = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        mouseP.z = transform.position.z; // 关键:将鼠标位置Z轴对齐到武器所在平面
        Vector3 direct = mouseP - transform.position; // 修正方向:获取鼠标指向武器的向量(原代码是反方向)
        direct.Normalize();
        float Angle = Mathf.Atan2(direct.y, direct.x) * Mathf.Rad2Deg;
        Quaternion rotate = Quaternion.Euler(0, 0, Angle);
        transform.rotation = rotate;
    }
}
透视相机场景

用射线检测获取武器所在平面的鼠标交点,精度更高:

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

public class Rotation : MonoBehaviour
{
    private Vector3 mouseP;       
    void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        // 创建过武器位置、垂直于屏幕的平面(默认Z轴为屏幕垂直方向)
        Plane plane = new Plane(Vector3.forward, transform.position);
        if (plane.Raycast(ray, out float distance))
        {
            mouseP = ray.GetPoint(distance);
            Vector3 direct = mouseP - transform.position;
            direct.Normalize();
            float Angle = Mathf.Atan2(direct.y, direct.x) * Mathf.Rad2Deg;
            Quaternion rotate = Quaternion.Euler(0, 0, Angle);
            transform.rotation = rotate;
        }
    }
}

2. 额外修正:方向向量的正确性

原代码中transform.position - mouseP得到的是武器指向自身到鼠标的反方向,会导致武器背向鼠标旋转。改成mouseP - transform.position才能让武器正确朝向鼠标位置。

内容的提问来源于stack exchange,提问作者В'ячеслав Іван

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:15:38