コード例 #1
0
    // Update is called once per frame
    void Update()
    {
        Ray        ray = mainCamera.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 1000.0f))
        {
            if (hit.collider.transform.CompareTag("Object"))
            {
                currentFocusedObject = hit.collider.transform.parent.parent.GetComponent <ObjectScript> ();
                currentFocusedObject.Focus();
            }
            else if (hit.collider.transform.CompareTag("YTranslation"))
            {
                currentFocusedHandle = hit.collider.transform.parent.GetComponent <Handle> ();
                currentFocusedHandle.Focus();
            }
            else if (hit.collider.transform.CompareTag("UniformScaling"))
            {
                currentFocusedHandle = hit.collider.transform.parent.GetComponent <Handle> ();
                currentFocusedHandle.Focus();
            }
            else if (hit.collider.transform.CompareTag("NonUniformScaling"))
            {
                currentFocusedHandle = hit.collider.transform.parent.GetComponent <Handle>();
                currentFocusedHandle.Focus();
            }
            else if (hit.collider.transform.CompareTag("RotationHandle"))
            {
                currentFocusedHandle = hit.collider.transform.parent.GetComponent <Handle>();
                currentFocusedHandle.Focus();
            }
            else
            {
                if (currentFocusedObject != null)
                {
                    currentFocusedObject.UnFocus();
                    currentFocusedObject = null;
                }
            }
        }
        else
        {
            if (currentFocusedObject != null)
            {
                currentFocusedObject.UnFocus();
                currentFocusedObject = null;
            }

            if (currentFocusedHandle != null)
            {
                currentFocusedHandle.UnFocus();
                currentFocusedHandle = null;
            }
        }

        // other colliders for handles
        if (Input.GetMouseButtonDown(0))
        {
            if (currentFocusedHandle != null)
            {
                currentDraggedHandle = currentFocusedHandle;
                currentDraggedHandle.StartDragging();
            }
            else if (currentFocusedObject != null)
            {
                if (currentSelectedObject != null)
                {
                    if (currentSelectedObject != currentFocusedObject)
                    {
                        currentSelectedObject.DeSelect();
                        currentSelectedObject = null;
                    }
                }
                currentFocusedObject.Select();
                currentSelectedObject = currentFocusedObject;
                currentSelectedObject.StartDragging(ray);
            }
            else
            {
                if (currentSelectedObject != null && !currentSelectedObject.dragging && currentFocusedHandle == null)
                {
                    currentSelectedObject.DeSelect();
                    currentSelectedObject = null;
                }
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            if (currentSelectedObject != null)
            {
                currentSelectedObject.StopDragging();
            }

            if (currentDraggedHandle != null)
            {
                currentDraggedHandle.StopDragging();
                currentDraggedHandle = null;
            }
        }
    }