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; }
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(); }
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(); }
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; }