鼠标拖拽

来源:互联网 发布:java购物系统源码 编辑:程序博客网 时间:2024/05/21 18:49

1.把这段脚本拖给想要拖拽的物体,然后加上碰撞盒就可以了。

    private Vector3 _vec3TargetScreenSpace;// 目标物体的屏幕空间坐标      private Vector3 _vec3TargetWorldSpace;// 目标物体的世界空间坐标      private Transform _trans;// 目标物体的空间变换组件      private Vector3 _vec3MouseScreenSpace;// 鼠标的屏幕空间坐标      private Vector3 _vec3Offset;// 偏移      void Awake()    {        _trans = transform;     }    IEnumerator OnMouseDown()    {        // 把目标物体的世界空间坐标转换到它自身的屏幕空间坐标           _vec3TargetScreenSpace = Camera.main.WorldToScreenPoint(_trans.position);        // 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标)           _vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z);        // 计算目标物体与鼠标物体在世界空间中的偏移量           _vec3Offset = _trans.position - Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace);        // 鼠标左键按下           while (Input.GetMouseButton(0))        {            // 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标)              _vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z);            // 把鼠标的屏幕空间坐标转换到世界空间坐标(Z值使用目标物体的屏幕空间坐标),加上偏移量,以此作为目标物体的世界空间坐标              _vec3TargetWorldSpace = Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace) + _vec3Offset;            // 更新目标物体的世界空间坐标               _trans.position = _vec3TargetWorldSpace;            // 等待固定更新               yield return new WaitForFixedUpdate();        }    }  }


2.实现用鼠标拖拽鼠标  鼠标进入物体改变物体颜色

    public Texture2D[] pic = new Texture2D[4];    private Color c;    private Texture origPic;    private int index;    private Vector3 screenPoint;    private Vector3 scanPos;    private Vector3 offset;    private Vector3 origPos;    static public bool bDrag;    // Use this for initialization        void Start()    {        c = GetComponent<Renderer>().material.color;        origPic = GetComponent<Renderer>().material.mainTexture;        //pic = new Texture2D[4];            index = 0;        scanPos = this.transform.position;        origPos = scanPos;        bDrag = false;    }    // Update is called once per frame        void Update()    {    }    void OnMouseDown()    {        print("Mouse down");        GetComponent<Renderer>().material.color = c;        GetComponent<Renderer>().material.mainTexture = pic[index];        index++;        if (index == 3)            index = 0;        /////            screenPoint = Camera.main.WorldToScreenPoint(scanPos);        offset = scanPos - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));        Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);        Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;        //print(curPosition);            transform.position = curPosition;    }    void OnMouseEnter()    {        print("Mouse enter");        index = 0;        GetComponent<Renderer>().material.color = Color.red;    }    void OnMouseExit()    {        print("Mouse exit");        GetComponent<Renderer>().material.color = c;        GetComponent<Renderer>().material.mainTexture = origPic;    }    void OnMouseDrag()    {        bDrag = true;        Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);        Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;        transform.position = curPosition;        print("curPosition" + curPosition);    }    void OnMouseUp()    {        print("mouse up");        //transform.TransformPoint(origPos);            bDrag = false;        transform.position = origPos;    } 

                                             
0 0
原创粉丝点击