分享

诚之和:Unity3D拖动任意对象GameObject移动到任意地方

 掌财社 2021-10-25
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);

        }
    }

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多