コード例 #1
0
    public void StartDragging()
    {
        if (typeOfHandle == HandleType.translateY || typeOfHandle == HandleType.ScaleUniform || typeOfHandle == HandleType.ScaleNonUniform)
        {
            // create plane

            dragPlane = new Plane();

            Vector3 groundPointBelowCam    = new Vector3(Camera.main.transform.position.x, 0f, Camera.main.transform.position.z);
            Vector3 groundPointBelowObject = new Vector3(connectObject.transform.position.x, 0f, connectObject.transform.position.z);

            dragPlane.SetNormalAndPosition(groundPointBelowCam - groundPointBelowObject, transform.position);

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if (dragPlane.Raycast(ray, out rayDistance))
            {
                posOnDragBegin = ray.GetPoint(rayDistance);

                if (typeOfHandle == HandleType.translateY)
                {
                    offsetOnDragBegin = connectObject.transform.position - posOnDragBegin;
                }
                else if (typeOfHandle == HandleType.ScaleUniform)
                {
                    offsetOnDragBegin = connectObject.boundingBox.GetTopCenter() - posOnDragBegin;
                    scaleOneBeginDrag = connectObject.cube.transform.parent.localScale;

                    // get current scale Top to bottom
                    InitialTopToBottom = connectObject.boundingBox.GetTopCenter() - connectObject.boundingBox.GetBottomCenter();
                }
                else if (typeOfHandle == HandleType.ScaleUniform)
                {
                    offsetOnDragBegin = connectObject.boundingBox.GetTopCenter() - posOnDragBegin;
                    scaleOneBeginDrag = connectObject.cube.transform.parent.localScale;

                    // get current scale Top to bottom
                    InitialTopToBottom = connectObject.boundingBox.GetTopCenter() - connectObject.boundingBox.GetBottomCenter();
                }
                else if (typeOfHandle == HandleType.ScaleNonUniform)
                {
                    offsetOnDragBegin = transform.parent.position - posOnDragBegin;
                    scaleOneBeginDrag = connectObject.cube.transform.parent.localScale;

                    // get current scale Top to bottom
                    InitialHandleToCenter = transform.parent.position - connectObject.boundingBox.GetCenter();
                }
            }

            dragging = true;

            connectObject.HideHandlesExcept(transform.parent.gameObject);
        }
    }