using UnityEngine;using System.Collections;public class DragAndDrog : MonoBehaviour { private GameObject target; private bool isMouseDrag; private Vector3 screenPosition; private Vector3 offset;// Use this for initialization void Start () { } // Update is called once per frame void Update () { GameObjectDragAndDrog(); } //任意拖拽 private GameObject ReturnGameObjectDrag(out RaycastHit hit) { target = null; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray.origin, ray.direction * 10, out hit)) { target = hit.collider.gameObject; } return target; } //拖拽Updata private void GameObjectDragAndDrog() { if (Input.GetMouseButtonDown (0)) { RaycastHit hitInfo; target = ReturnGameObjectDrag(out hitInfo); if (target != null) { isMouseDrag = true; screenPosition = Camera.main.WorldToScreenPoint(target.transform.position); offset = target.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z)); } } if (Input.GetMouseButtonUp(0)) { isMouseDrag = false; } if (isMouseDrag) { Vector3 currentScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z); Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenSpace) + offset; target.transform.localPosition = new Vector3(currentPosition.x, currentPosition.y, currentPosition.z); } } } |
|