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

如何编写类此触摸脚本的鼠标移动物体代码(透视相机)

适配透视相机的鼠标移动物体代码(对应原安卓触摸功能)

原安卓触摸代码的核心逻辑是:触摸拖动时,根据触摸的屏幕偏移量按比例修改物体的X、Y轴位置,Z轴保持固定。以下是功能完全一致、适配透视相机的鼠标控制版本:

public class MouseDragObject : MonoBehaviour
{
    public Camera dragCamera; // 指定拖拽用的透视相机,可在Inspector面板设置
    private float speedModifier = 0.01f;

    private void Start()
    {
        // 若未指定相机,默认使用主相机
        if (dragCamera == null)
        {
            dragCamera = Camera.main;
        }
    }

    private void Update()
    {
        // 检测鼠标左键按住且鼠标有移动(对应触摸拖动状态)
        if (Input.GetMouseButton(0) && (Input.GetAxis("Mouse X") != 0 || Input.GetAxis("Mouse Y") != 0))
        {
            // 获取鼠标每帧的偏移量
            float mouseDeltaX = Input.GetAxis("Mouse X");
            float mouseDeltaY = Input.GetAxis("Mouse Y");

            // 计算物体到相机的屏幕深度,用于透视空间转换
            float objectScreenDepth = dragCamera.WorldToScreenPoint(transform.position).z;

            // 将屏幕空间的鼠标偏移转换为世界空间的移动量
            Vector3 screenOffset = new Vector3(
                mouseDeltaX * speedModifier * Screen.width,
                mouseDeltaY * speedModifier * Screen.height,
                objectScreenDepth
            );
            Vector3 targetWorldPos = dragCamera.ScreenToWorldPoint(screenOffset);
            Vector3 worldDelta = targetWorldPos - dragCamera.ScreenToWorldPoint(new Vector3(0, 0, objectScreenDepth));

            // 应用移动,保持Z轴位置不变
            transform.position += new Vector3(worldDelta.x, worldDelta.y, 0);
        }
    }
}

关键说明

  • 适配透视相机:通过ScreenToWorldPoint和WorldToScreenPoint转换,确保物体在不同距离相机的位置下,拖拽手感和原触摸操作一致,不会出现近快远慢的问题。
  • 逻辑对齐:鼠标左键按住对应触摸按下状态,鼠标移动对应触摸的TouchPhase.Moved状态,speedModifier作用和原代码完全相同,用于调整拖拽灵敏度。
  • 兼容性:若未指定相机,自动使用场景中的主相机,需确保主相机为透视模式。

内容的提问来源于stack exchange,提问作者Axay Gadhia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:20:34