public Transform target;
private Vector3 offset;
private float distance;
void Update() {
if (Input.GetMouseButtonDown(0)) {
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit)) {
target = hit.transform;
offset = target.position - hit.point;
distance = hit.distance;
}
}
if (Input.GetMouseButton(0) && !Input.GetMouseButtonDown(0) && target != null) {
// для 2D
Vector3 v = Camera.main.ScreenToWorldPoint(Input.mousePosition);
v.y = target.y;
v.z = target.z;
target.position = v;
// для 3D
/*
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Vector3 v = ray.direction;
v.y = 0f;
v.z = 0f;
target.position = ray.origin + v * distance + offset;
*/
}
if (Input.GetMouseButtonUp(0)
target = null;
}