{"_id":"5b1f8576c2505d0003125488","category":{"_id":"5b1f8576c2505d000312542d","version":"5b1f8576c2505d00031254db","project":"571fa55ca0acd42000af9545","__v":0,"sync":{"url":"","isSync":false},"reference":false,"createdAt":"2017-01-01T16:55:17.729Z","from_sync":false,"order":10,"slug":"secondary-controller-grab-actions","title":"Secondary Controller Grab Actions"},"user":"571fa519db52d01700f5cf3d","parentDoc":null,"project":"571fa55ca0acd42000af9545","version":{"_id":"5b1f8576c2505d00031254db","project":"571fa55ca0acd42000af9545","__v":4,"forked_from":"594949e52be16d0026ec04cd","createdAt":"2017-06-20T16:14:29.816Z","releaseDate":"2017-06-20T16:14:29.816Z","categories":["5b1f8576c2505d0003125424","5b1f8576c2505d0003125425","5b1f8576c2505d0003125426","5b1f8576c2505d0003125427","5b1f8576c2505d0003125428","5b1f8576c2505d0003125429","5b1f8576c2505d000312542a","5b1f8576c2505d000312542b","5b1f8576c2505d000312542c","5b1f8576c2505d000312542d","5b1f8576c2505d000312542e","5b1f8576c2505d000312542f","5b1f8576c2505d0003125430","5b1f8576c2505d0003125431","5b1f8576c2505d0003125432","5b1f8576c2505d0003125433","5b1f8576c2505d0003125434","5b1f8576c2505d0003125435","5b1f8576c2505d0003125436","5b1f8576c2505d0003125437","5b1f8576c2505d0003125438","5b1f8aab9c683000032979e7","5b1f8b2f3073470003ffa5da","5b1f8bd9fd653400031d94f4","5b1f900bd4c5f000036b57bd"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"Mangalica","version_clean":"3.3.0","version":"3.3.0"},"githubsync":"","__v":0,"updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-01-01T16:57:41.906Z","link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":4,"body":"> extends [VRTK_BaseGrabAction](doc:vrtk_basegrabaction)\n\n## Overview\n\nControls the facing direction of the grabbed Interactable Object to rotate in the direction of the secondary grabbing object.\n\n  > Rotation will only occur correctly if the Interactable Object `forward` is correctly aligned to the world `z-axis` and the `up` is correctly aligned to the world `y-axis`. It is also not possible to control the direction of an Interactable Object that uses the Joint based grab mechanics.\n\n**Script Usage:**\n * Place the `VRTK_ControlDirectionGrabAction` script on either:\n   * The GameObject of the Interactable Object to detect interactions on.\n   * Any other scene GameObject and then link that GameObject to the Interactable Objects `Secondary Grab Action Script` parameter to denote use of the secondary grab action.\n\n## Inspector Parameters\n\n * **Ungrab Distance:** The distance the secondary controller must move away from the original grab position before the secondary controller auto ungrabs the object.\n * **Release Snap Speed:** The speed in which the object will snap back to it's original rotation when the secondary controller stops grabbing it. `0` for instant snap, `infinity` for no snap back.\n * **Lock Z Rotation:** Prevent the secondary controller rotating the grabbed object through it's z-axis.\n\n## Class Methods\n\n### Initialise/5\n\n  > `public override void Initialise(VRTK_InteractableObject currentGrabbdObject, VRTK_InteractGrab currentPrimaryGrabbingObject, VRTK_InteractGrab currentSecondaryGrabbingObject, Transform primaryGrabPoint, Transform secondaryGrabPoint)`\n\n * Parameters\n   * `VRTK_InteractableObject currentGrabbdObject` - The Interactable Object script for the object currently being grabbed by the primary grabbing object.\n   * `VRTK_InteractGrab currentPrimaryGrabbingObject` - The Interact Grab script for the object that is associated with the primary grabbing object.\n   * `VRTK_InteractGrab currentSecondaryGrabbingObject` - The Interact Grab script for the object that is associated with the secondary grabbing object.\n   * `Transform primaryGrabPoint` - The point on the Interactable Object where the primary Interact Grab initially grabbed the Interactable Object.\n   * `Transform secondaryGrabPoint` - The point on the Interactable Object where the secondary Interact Grab initially grabbed the Interactable Object.\n * Returns\n   * _none_\n\nThe Initalise method is used to set up the state of the secondary action when the object is initially grabbed by a secondary controller.\n\n### ResetAction/0\n\n  > `public override void ResetAction()`\n\n * Parameters\n   * _none_\n * Returns\n   * _none_\n\nThe ResetAction method is used to reset the secondary action when the Interactable Object is no longer grabbed by a secondary Interact Grab.\n\n### OnDropAction/0\n\n  > `public override void OnDropAction()`\n\n * Parameters\n   * _none_\n * Returns\n   * _none_\n\nThe OnDropAction method is executed when the current grabbed Interactable Object is dropped and can be used up to clean up any secondary grab actions.\n\n### ProcessUpdate/0\n\n  > `public override void ProcessUpdate()`\n\n * Parameters\n   * _none_\n * Returns\n   * _none_\n\nThe ProcessUpdate method runs in every Update on the Interactable Object whilst it is being grabbed by a secondary Interact Grab.\n\n### ProcessFixedUpdate/0\n\n  > `public override void ProcessFixedUpdate()`\n\n * Parameters\n   * _none_\n * Returns\n   * _none_\n\nThe ProcessFixedUpdate method runs in every FixedUpdate on the Interactable Object whilst it is being grabbed by a secondary Interact Grab and influences the rotation of the Interactable Object.\n\n## Example\n\n`VRTK/Examples/043_Controller_SecondaryControllerActions` demonstrates the ability to grab an object with one controller and control their direction with the second controller.","excerpt":"","slug":"vrtk_controldirectiongrabaction","type":"basic","title":"VRTK_ControlDirectionGrabAction"}

VRTK_ControlDirectionGrabAction


> extends [VRTK_BaseGrabAction](doc:vrtk_basegrabaction) ## Overview Controls the facing direction of the grabbed Interactable Object to rotate in the direction of the secondary grabbing object. > Rotation will only occur correctly if the Interactable Object `forward` is correctly aligned to the world `z-axis` and the `up` is correctly aligned to the world `y-axis`. It is also not possible to control the direction of an Interactable Object that uses the Joint based grab mechanics. **Script Usage:** * Place the `VRTK_ControlDirectionGrabAction` script on either: * The GameObject of the Interactable Object to detect interactions on. * Any other scene GameObject and then link that GameObject to the Interactable Objects `Secondary Grab Action Script` parameter to denote use of the secondary grab action. ## Inspector Parameters * **Ungrab Distance:** The distance the secondary controller must move away from the original grab position before the secondary controller auto ungrabs the object. * **Release Snap Speed:** The speed in which the object will snap back to it's original rotation when the secondary controller stops grabbing it. `0` for instant snap, `infinity` for no snap back. * **Lock Z Rotation:** Prevent the secondary controller rotating the grabbed object through it's z-axis. ## Class Methods ### Initialise/5 > `public override void Initialise(VRTK_InteractableObject currentGrabbdObject, VRTK_InteractGrab currentPrimaryGrabbingObject, VRTK_InteractGrab currentSecondaryGrabbingObject, Transform primaryGrabPoint, Transform secondaryGrabPoint)` * Parameters * `VRTK_InteractableObject currentGrabbdObject` - The Interactable Object script for the object currently being grabbed by the primary grabbing object. * `VRTK_InteractGrab currentPrimaryGrabbingObject` - The Interact Grab script for the object that is associated with the primary grabbing object. * `VRTK_InteractGrab currentSecondaryGrabbingObject` - The Interact Grab script for the object that is associated with the secondary grabbing object. * `Transform primaryGrabPoint` - The point on the Interactable Object where the primary Interact Grab initially grabbed the Interactable Object. * `Transform secondaryGrabPoint` - The point on the Interactable Object where the secondary Interact Grab initially grabbed the Interactable Object. * Returns * _none_ The Initalise method is used to set up the state of the secondary action when the object is initially grabbed by a secondary controller. ### ResetAction/0 > `public override void ResetAction()` * Parameters * _none_ * Returns * _none_ The ResetAction method is used to reset the secondary action when the Interactable Object is no longer grabbed by a secondary Interact Grab. ### OnDropAction/0 > `public override void OnDropAction()` * Parameters * _none_ * Returns * _none_ The OnDropAction method is executed when the current grabbed Interactable Object is dropped and can be used up to clean up any secondary grab actions. ### ProcessUpdate/0 > `public override void ProcessUpdate()` * Parameters * _none_ * Returns * _none_ The ProcessUpdate method runs in every Update on the Interactable Object whilst it is being grabbed by a secondary Interact Grab. ### ProcessFixedUpdate/0 > `public override void ProcessFixedUpdate()` * Parameters * _none_ * Returns * _none_ The ProcessFixedUpdate method runs in every FixedUpdate on the Interactable Object whilst it is being grabbed by a secondary Interact Grab and influences the rotation of the Interactable Object. ## Example `VRTK/Examples/043_Controller_SecondaryControllerActions` demonstrates the ability to grab an object with one controller and control their direction with the second controller.