Example #1
0
        public void Release()
        {
            // can't be called if not grabbing
            if (!grabCtrl)
            {
                return;
            }

            // return to it's original parent if any
            transform.parent = originalParent;

            // restore rigid body
            rb.isKinematic = isKinematic;

            // handle release actions
            switch (releaseAction)
            {
            case ReleaseAction.backToOrigin:
                BackToOrigin();
                break;

            case ReleaseAction.throws:
                ThrowItem();
                break;
            }

            // trigger event
            OnRelease.Invoke();

            // disconnect from controller
            grabCtrl = null;
        }
Example #2
0
        public void Grab(GrabController grabCtrl)
        {
            //if the controller already has grabbed the object, then return
            if (this.grabCtrl)
            {
                return;
            }

            //otherwise, object is picked up
            this.grabCtrl = grabCtrl;

            //objects original position and rotation is stored, and the previous position (if we want it reset) is stored
            originalPosition = transform.position;
            originalRotation = transform.rotation;
            prevPosition     = originalPosition;

            //if the object has to face forward when picked up, then the grabbed object is transformed to forward.
            if (facesForward)
            {
                transform.forward = grabCtrl.transform.forward;
            }

            //we make the object being picked up a child of the controller that grabbed it
            transform.parent = grabCtrl.transform;

            //while it's picked up, it's loosed from the whims of physics and grabbity
            rb.isKinematic = true;

            onGrab.Invoke();
        }
Example #3
0
        public void Grab(GrabController grabCtrl)
        {
            // can be called if already grabbing
            if (this.grabCtrl)
            {
                return;
            }

            this.grabCtrl = grabCtrl;

            // keep for when releasing
            originalPosition = transform.position;
            originalRotation = transform.rotation;
            prevPosition     = originalPosition;

            // face to the same direction as the controller
            if (facesForward)
            {
                transform.forward = grabCtrl.transform.forward;
            }

            // set as child of the controller
            transform.parent = grabCtrl.transform;

            // set rigidbody to kinematic
            rb.isKinematic = true;

            // trigger event
            OnGrab.Invoke();
        }
Example #4
0
        public void Release()
        {
            if (!grabCtrl)
            {
                return;
            }

            transform.parent = originalParent;
            rb.isKinematic   = isKinematic;

            switch (releaseAction)
            {
            case ReleaseAction.backToOrigin:
                BackToOrigin();
                break;

            case ReleaseAction.throws:
                ThrowItem();
                break;
            }

            onRelease.Invoke();
            grabCtrl = null;
        }