2D或3D的普通游戏对象,或渲染模式为WorldSpace的画布下的UI物体
需要为其加上相应的碰撞器组件,然后添加如下脚本:
using UnityEngine;
public class Drag: MonoBehaviour
{
float offsetX, offsetY;
Camera main;
private void Awake() => main = Camera.main;
private void OnMouseDown()
{
Vector3 world = main.ScreenToWorldPoint(Input.mousePosition);
offsetX = world.x - transform.position.x;
offsetY = world.y - transform.position.y;
}
private void OnMouseDrag()
{
Vector3 world = main.ScreenToWorldPoint(Input.mousePosition);
transform.position = new Vector3(world.x - offsetX, world.y - offsetY, transform.position.z);
}
}
渲染模式为ScreenSpace-Overlay的画布下的UI物体
添加如下脚本:
using UnityEngine;
using UnityEngine.EventSystems;
public class Drag : MonoBehaviour, IInitializePotentialDragHandler, IDragHandler
{
float offsetX, offsetY;
public void OnInitializePotentialDrag(PointerEventData eventData)
{
offsetX = eventData.position.x - transform.position.x;
offsetY = eventData.position.y - transform.position.y;
}
public void OnDrag(PointerEventData eventData)
{
Vector2 position = eventData.position;
transform.position = new Vector3(position.x - offsetX, position.y - offsetY, transform.position.z);
}
}
渲染模式为ScreenSpace-Camera的画布下的UI物体
添加如下脚本:
using UnityEngine;
using UnityEngine.EventSystems;
public class Drag : MonoBehaviour, IInitializePotentialDragHandler, IDragHandler
{
float offsetX, offsetY;
Camera main;
private void Awake() => main = Camera.main;
public void OnInitializePotentialDrag(PointerEventData eventData)
{
Vector3 world = main.ScreenToWorldPoint(eventData.position);
offsetX = world.x - transform.position.x;
offsetY = world.y - transform.position.y;
}
public void OnDrag(PointerEventData eventData)
{
Vector2 world = main.ScreenToWorldPoint(eventData.position);
transform.position = new Vector3(world.x - offsetX, world.y - offsetY, transform.position.z);
}
}