unity 鼠标拖拽物体
时间: 2025-04-30 18:27:58 浏览: 43
### Unity 中实现鼠标拖拽物体
在 Unity 中通过 UGUI 和事件系统可以方便地实现物品的拖拽功能。为了完成这一目标,需要创建一个脚本来处理拖拽逻辑并实现特定接口。
#### 接口实现
对于拖拽操作而言,主要涉及到三个重要阶段:开始拖拽、正在进行中的拖拽以及结束拖拽。因此,在编写用于控制对象拖拽行为的 C# 脚本时,应当让其继承 `MonoBehaviour` 类的同时也去实现 `IDragHandler`, `IBeginDragHandler` 及 `IEndDragHandler` 这几个来自 UnityEngine.EventSystems 命名空间下的接口[^1]。
```csharp
using UnityEngine;
using UnityEngine.EventSystems;
public class ItemDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler {
private RectTransform rectTransform;
void Start() {
rectTransform = GetComponent<RectTransform>();
}
public void OnBeginDrag(PointerEventData eventData) {
// 开始拖拽时的操作
Debug.Log("Start Dragging");
}
public void OnDrag(PointerEventData eventData) {
// 正在拖拽期间执行的动作
rectTransform.anchoredPosition += eventData.delta / Canvas.scaleFactor;
}
public void OnEndDrag(PointerEventData eventData) {
// 结束拖拽后的清理工作或其他动作
Debug.Log("Stop Dragging");
}
}
```
此段代码展示了如何利用上述提到的接口方法来响应不同状态下的用户交互,并且还包含了实际移动 UI 元素位置的具体做法——即根据鼠标的位移调整被选中组件的位置属性。
另外一种情况是当希望直接操控场景内的三维模型而非仅限于二维界面元素时,则可借鉴另一种方式来进行旋转或平移变换。例如下面这段用来基于鼠标输入改变游戏对象姿态的小片段:
```csharp
void Update () {
if (Input.GetMouseButton(0)) {
float rotationX = Input.GetAxis("Mouse X") * speed;
float rotationY = Input.GetAxis("Mouse Y") * speed;
transform.Rotate(Vector3.up, -rotationX);
transform.Rotate(Vector3.right, rotationY);
}
}
```
这里采用的是监听持续按住左键的状态下获取水平方向 (`Mouse X`) 与垂直方向(`Mouse Y`) 的增量值作为绕指定轴线转动的角度参数[^2]。
阅读全文
相关推荐


















