友達の輪 2023-12-23 09:15 采纳率: 97.4%
浏览 12
已结题

unity如何以3D物体Quan建立一个坐标系

unity如何以一个Quad建立一个是坐标系
当鼠标放在Quad的左上角时显示为(0,0),移动到右下角时显示为(102,105),最大值可以自己调节,这里(102,105)是举一个例子,那么右上角可能就是(102,0),左下角可能就是(0,105)以此类推,当鼠标在这个Quad的平面内移动时,可以根据原点(0,0)点和最大值(102,105)点按比例计算出当前鼠标的二位坐标应该是多少,比如此时我鼠标放在Quad中心点位置,那现实的坐标可能就是(51,52.5),放到Quad内的其他位置也会根据最小点和最大点按比例计算当前的坐标,以此类推。注意!最大值并不是Quad的大小比如(102,105)并不是说Quad的缩放长度,而是我自己想定义多少就定义多少,当鼠标放在Quad上面的时候就可以根据最小值和最大值等比例的计算出当前鼠标位置的坐标,例如我的最大值是102,105那么我鼠标从Quad的(0,0)点对应的那个点向最大点滑动,没滑动一点x和y加一,但如果最大值我改成了51,52.5那么滑动同样的长度X就是加0.5,y也加0.5以此类推

  • 写回答

2条回答 默认 最新

  • 游戏开发小Y Unity3D领域新星创作者 2023-12-23 11:25
    关注

    示例脚本,你可以将其附加到你的Quad对象上:

    using UnityEngine;
    
    public class MousePositionOnQuad : MonoBehaviour
    {
        // 定义Quad的最大和最小坐标
        public Vector2 minPosition = new Vector2(0, 0);
        public Vector2 maxPosition = new Vector2(102, 105);
    
        // 计算鼠标位置的函数
        public Vector2 CalculateMousePosition()
        {
            // 获取鼠标的世界坐标
            Vector3 mouseWorldPosition = Input.mousePosition;
            
            // 获取当前Quad的位置和旋转
            Vector3 quadPosition = transform.position;
            Quaternion quadRotation = transform.rotation;
            
            // 将鼠标的世界坐标转换为相对于Quad的坐标
            Vector3 mouseRelativeToQuad = Quaternion.Inverse(quadRotation) * (mouseWorldPosition - quadPosition);
            
            // 根据最小和最大坐标计算鼠标位置的相对坐标
            Vector2 mouseRelativePosition = new Vector2(
                (mouseRelativeToQuad.x / maxPosition.x) * (maxPosition.x - minPosition.x) + minPosition.x,
                (mouseRelativeToQuad.y / maxPosition.y) * (maxPosition.y - minPosition.y) + minPosition.y
            );
            
            return mouseRelativePosition;
        }
        
        // 在Update方法中调用CalculateMousePosition来更新鼠标位置
        void Update()
        {
            Vector2 mousePosition = CalculateMousePosition();
            Debug.Log("Mouse position on Quad: " + mousePosition);
        }
    }
    

    在这个脚本中,CalculateMousePosition函数首先获取鼠标在世界空间中的位置。然后它通过变换将这个位置转换到相对于Quad的局部坐标系中。接下来,根据最小和最大坐标,计算出鼠标位置的相对坐标,并返回这个坐标。最后,在Update方法中,每帧都会调用这个函数并将结果打印出来。

    你可以通过修改minPositionmaxPosition的值来改变你的坐标系。请注意,这些值需要根据你的需求来设置。这个脚本也假设你的Quad没有进行过任何旋转,如果进行了旋转,你可能需要相应地调整代码以正确地计算鼠标的位置。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月6日
  • 已采纳回答 12月29日
  • 创建了问题 12月23日

悬赏问题

  • ¥20 ESP32使用MicroPyhon开发,怎么获取485温湿度的值,温湿度计使用的鞋子是Modbus RTU
  • ¥50 苹果MGIE项目部署缺少emb权重
  • ¥15 采用ansys进行机翼在特定路径下的打孔过程中的受力分析
  • ¥15 单片机adb主机连接手机,usb调试密钥无法保存
  • ¥15 已知X和Y有以下关系,求X和Y的关系式
  • ¥15 net core 同时编辑怎么防止数据多保存了
  • ¥15 matlab做ba模型让其在ba和er规则下生长
  • ¥15 请问Quartus的Verilog代码怎么写?
  • ¥100 Mac 版foxmail 收邮件问题
  • ¥15 QWebEngineView