Unity 切换UI坐标和世界坐标

news/2024/10/22 13:20:25

using UnityEngine;// 这个脚本实现了,本脚本所在的游戏物体能够被拖拽
public class DragObjectT : MonoBehaviour
{private Vector3 screenPoint; // 存储物体在屏幕上的位置private Vector3 offset; // 存储鼠标点击位置与物体实际位置的偏移量private bool isDragging = false; // 标志位,表示物体是否正在被拖拽void Update(){// 检测鼠标左键是否按下if (Input.GetMouseButtonDown(0)){RaycastHit hit;Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 从摄像机发射一条射线到鼠标位置// 使用射线检测是否击中了某个物体if (Physics.Raycast(ray, out hit)){// 检查被击中的物体是否是本脚本所附加的物体if (hit.collider.gameObject == gameObject){screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position); // 将物体的世界坐标转换为屏幕坐标offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); // 计算偏移量isDragging = true; // 设置拖拽标志位为真}}}// 检测鼠标左键是否持续按下并且物体正在被拖拽if (Input.GetMouseButton(0) && isDragging){Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z); // 获取当前鼠标位置的屏幕坐标Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset; // 将屏幕坐标转换为世界坐标并加上偏移量transform.position = curPosition; // 更新物体的位置}// 检测鼠标左键是否释放if (Input.GetMouseButtonUp(0)){isDragging = false; // 设置拖拽标志位为假}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74607.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

从事项目管理的朋友们,是如何有效管理项目进度

从事项目管理的專业人士,优化和管理项目进度的有效方法和技巧主要包括以下几点:•创建详细的项目时间表、•分配和优化资源、•设定和跟踪进度基准、•实施有效的团队沟通及•积极应对和管理风险。 首先让我们详细讨论创建详细的项目时间表。针对任何新的项目或任务,首要步骤…

习题2.13

习题2.13代码 import numpy as np import pandas as pd import sympy as sp sp.init_printing(use_unicode=True) import matplotlib.pyplot as plt plt.rcParams[font.sans-serif]=[Times New Roman + SimSun + WFM Sans SC] plt.rcParams[mathtext.fontset]=cm Times New Rom…

习题2.12

习题2.12代码 import numpy as np import pandas as pd import sympy as sp sp.init_printing(use_unicode=True) import matplotlib.pyplot as plt plt.rcParams[font.sans-serif]=[Times New Roman + SimSun + WFM Sans SC] plt.rcParams[mathtext.fontset]=cm Times New Rom…

React和Vue哪个更适合前端开发

在前端开发领域,React和Vue一直是两大热门框架。本文深入对比两者在不同维度的表现,包括:1. 设计理念和学习曲线;2. 数据绑定;3. 组件化;4. 生态系统和工具;5. 性能;6. 社区支持;7. 企业采用和工作机会。通过全面的比较分析,我们可以发现React和Vue各有优势,选择哪一…

tmux 终端

一、tmux介绍tmux 主要是为类 Unix 系统(如 Linux 和 macOS)设计的终端复用器;多个用户可以共享同一个 tmux 会话,适合于协作工作;用户可以通过配置文件进行定制,支持快捷键和命令的自定义。二、tmux安装在 Ubuntu / Debian 上安装: sudo apt-get update sudo apt-get in…

习题4.3

习题4.3代码 import cvxpy as cp import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif]=[Times New Roman + SimSun + WFM Sans SC] plt.rcParams[mathtext.fontset]=stix Times New Roman + SimSun + WFM Sans SC simsum宋体, times new roman …

剖析Air724UG的硬件设计,有大发现?03篇

​今天我们分享第三部分。 四、射频接口 天线接口管脚定义如下: 表格 19:RF_ANT 管脚定义管脚名序号描述LTE_ANT46LTE 天线接口BT/WiFi_ANT34蓝牙/WiFi 共用天线接口4.1 射频参考电路​ 图表 20:射频参考电路 注意:连接到模块RF天线焊盘的RF走线必须使用微带线或者其他类型…