示例#1
0
    // Update is called once per frame
    private void Update()
    {
        if (Input.GetMouseButtonDown(0) && Input.GetKey(KeyCode.LeftControl))
        {
            if (!(Camera.main is null))
            {
                _ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            }

            if (Physics.Raycast(_ray, out _hit, 100.0f) && !_hit.transform.gameObject.name.Equals("Plane"))
            {
                if (_hit.transform)
                {
                    //If an object was already selected change it to it's original color
                    if (_go != null)
                    {
                        //Look after the child if the object is a hand
                        if (HandChecker.IsAnyHand(_go))
                        {
                            _mRendererChild.material.color = _originalColor;
                            _child = null;
                        }
                        //Change of the material if the object is a moveTarget
                        else if (MoveTargetChecker.IsMoveTarget(_go))
                        {
                            _mRenderer.material = _defaultMaterial;
                        }
                        _mRenderer.material.color = _originalColor;
                    }

                    //Get object and Hit Point
                    _hitPoint       = _hit.point;
                    _hitPointNormal = _hit.normal;
                    _go             = _hit.transform.gameObject;

                    //Mark the selected object as red
                    _mRenderer     = _go.GetComponent <MeshRenderer>();
                    _originalColor = _mRenderer.material.color;

                    _addObjectMenu.ObjectSelected(_go);

                    //Look after the child if the object is a hand
                    if (HandChecker.IsAnyHand(_go))
                    {
                        _child          = _go.transform.GetChild(0);
                        _mRendererChild = _child.GetComponent <MeshRenderer>();
                        _mRendererChild.material.color = _selectColor;
                    }
                    //Change of the material if the object is a moveTarget
                    else if (MoveTargetChecker.IsMoveTarget(_go))
                    {
                        _defaultMaterial    = _mRenderer.material;
                        _mRenderer.material = _materialTransparent;
                    }
                    //Standard procedure for normal GameObjects
                    else
                    {
                        _mRenderer.material.color = _selectColor;
                    }

                    _dragAndRotate = new DragAndRotate(_go, lockY);
                    if (HandChecker.IsHand(_go))
                    {
                        _handMovement = new HandMovement(_go);
                    }
                }
            }
            else
            {
                //If an object was already selected change it to it's original color and set the object to null
                if (_go != null)
                {
                    //Look after the child if the object is a hand
                    if (HandChecker.IsAnyHand(_go))
                    {
                        _mRendererChild.material.color = _originalColor;
                        _child          = null;
                        _mRendererChild = null;
                    }
                    //Change of the material if the object is a moveTarget
                    else if (MoveTargetChecker.IsMoveTarget(_go))
                    {
                        _mRenderer.material = _defaultMaterial;
                    }
                    _mRenderer.material.color = _originalColor;
                    _go        = null;
                    _mRenderer = null;
                    _addObjectMenu.ObjectSelected(_go);
                }
            }
        }
        try
        {
            if (HandChecker.IsHand(_go))
            {
                //Handle rotate OR Drag for a hand object
                if (Input.GetKey(KeyCode.M) || Input.GetKey(KeyCode.X))
                {
                    _moving = true;
                }
                else
                {
                    _moving = false;
                }

                if (!Input.GetKey(KeyCode.X))
                {
                    _handMovement.CastRayFromObject();
                }
                if (!Input.GetKey(KeyCode.M))
                {
                    _handMovement.HandleRotateHand();
                }
            }
            else
            {
                //handle Rotate OR Drag
                if (!Input.GetKey(KeyCode.M))
                {
                    _dragAndRotate.HandleRotate();
                }
                if (!Input.GetKey(KeyCode.X) && !Input.GetKey(KeyCode.Y) && !Input.GetKey(KeyCode.Z))
                {
                    _dragAndRotate.HandleDrag();
                }
            }
        }
        catch (Exception)
        {
            //Catch if no object is selected
        }
    }