{"_id":"594949e82be16d0026ec0538","category":{"_id":"594949e62be16d0026ec04d4","version":"594949e52be16d0026ec04cd","project":"571fa55ca0acd42000af9545","__v":0,"sync":{"url":"","isSync":false},"reference":false,"createdAt":"2017-01-01T16:45:52.489Z","from_sync":false,"order":6,"slug":"interactions","title":"Interactions"},"parentDoc":null,"project":"571fa55ca0acd42000af9545","user":"571fa519db52d01700f5cf3d","version":{"_id":"594949e52be16d0026ec04cd","project":"571fa55ca0acd42000af9545","__v":2,"createdAt":"2017-06-20T16:14:29.816Z","releaseDate":"2017-06-20T16:14:29.816Z","categories":["594949e62be16d0026ec04ce","594949e62be16d0026ec04cf","594949e62be16d0026ec04d0","594949e62be16d0026ec04d1","594949e62be16d0026ec04d2","594949e62be16d0026ec04d3","594949e62be16d0026ec04d4","594949e62be16d0026ec04d5","594949e62be16d0026ec04d6","594949e62be16d0026ec04d7","594949e62be16d0026ec04d8","594949e62be16d0026ec04d9","594949e62be16d0026ec04da","594949e62be16d0026ec04db","594949e62be16d0026ec04dc","594949e62be16d0026ec04dd","594949e62be16d0026ec04de","594949e62be16d0026ec04df","594949e62be16d0026ec04e0","594949e62be16d0026ec04e1","59497219f4a8980024dd0631"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"Kunekune","version_clean":"3.2.0","version":"3.2.0"},"__v":0,"updates":[],"next":{"pages":[],"description":""},"createdAt":"2017-01-01T16:47:28.789Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":false,"order":7,"body":"## Overview\n\nThe Interact Use script is attached to a Controller object and requires the `VRTK_ControllerEvents` script to be attached as it uses this for listening to the controller button events for using and stop using interactable game objects.\n\nIt listens for the `AliasUseOn` and `AliasUseOff` events to determine when an object should be used and should stop using.\n\nThe Controller object also requires the `VRTK_InteractTouch` script to be attached to it as this is used to determine when an interactable object is being touched. Only valid touched objects can be used.\n\nAn object can be used if the Controller touches a game object which contains the `VRTK_InteractableObject` script and has the flag `isUsable` set to `true`.\n\nIf a valid interactable object is usable then pressing the set `Use` button on the Controller (default is `Trigger`) will call the `StartUsing` method on the touched interactable object.\n\n## Inspector Parameters\n\n * **Use Button:** The button used to use/unuse a touched object.\n * **Controller Events:** The controller to listen for the events on. If the script is being applied onto a controller then this parameter can be left blank as it will be auto populated by the controller the script is on at runtime.\n * **Interact Touch:** The Interact Touch to listen for touches on. If the script is being applied onto a controller then this parameter can be left blank as it will be auto populated by the controller the script is on at runtime.\n * **Interact Grab:** The Interact Grab to listen for grab actions on. If the script is being applied onto a controller then this parameter can be left blank as it will be auto populated by the controller the script is on at runtime.\n\n## Class Events\n\n * `UseButtonPressed` - Emitted when the use toggle alias button is pressed.\n * `UseButtonReleased` - Emitted when the use toggle alias button is released.\n * `ControllerStartUseInteractableObject` - Emitted when a use of a valid object is started.\n * `ControllerUseInteractableObject` - Emitted when a valid object starts being used.\n * `ControllerStartUnuseInteractableObject` - Emitted when a unuse of a valid object is started.\n * `ControllerUnuseInteractableObject` - Emitted when a valid object stops being used.\n\n## Unity Events\n\nAdding the `VRTK_InteractUse_UnityEvents` component to `VRTK_InteractUse` object allows access to `UnityEvents` that will react identically to the Class Events.\n\n * All C# delegate events are mapped to a Unity Event with the `On` prefix. e.g. `MyEvent` -> `OnMyEvent`.\n\n## Class Methods\n\n### IsUseButtonPressed/0\n\n  > `public virtual bool IsUseButtonPressed()`\n\n  * Parameters\n   * _none_\n  * Returns\n   * `bool` - Returns true if the use alias button is being held down.\n\nThe IsUsebuttonPressed method determines whether the current use alias button is being pressed down.\n\n### GetUsingObject/0\n\n  > `public virtual GameObject GetUsingObject()`\n\n  * Parameters\n   * _none_\n  * Returns\n   * `GameObject` - The game object of what is currently being used by this controller.\n\nThe GetUsingObject method returns the current object being used by the controller.\n\n### ForceStopUsing/0\n\n  > `public virtual void ForceStopUsing()`\n\n  * Parameters\n   * _none_\n  * Returns\n   * _none_\n\nThe ForceStopUsing method will force the controller to stop using the currently touched object and will also stop the object's using action.\n\n### ForceResetUsing/0\n\n  > `public virtual void ForceResetUsing()`\n\n  * Parameters\n   * _none_\n  * Returns\n   * _none_\n\nThe ForceResetUsing will force the controller to stop using the currently touched object but the object will continue with it's existing using action.\n\n### AttemptUse/0\n\n  > `public virtual void AttemptUse()`\n\n  * Parameters\n   * _none_\n  * Returns\n   * _none_\n\nThe AttemptUse method will attempt to use the currently touched object without needing to press the use button on the controller.\n\n## Example\n\n`VRTK/Examples/006_Controller_UsingADoor` simulates using a door object to open and close it. It also has a cube on the floor that can be grabbed to show how interactable objects can be usable or grabbable.\n\n`VRTK/Examples/008_Controller_UsingAGrabbedObject` shows that objects can be grabbed with one button and used with another (e.g. firing a gun).","excerpt":"","slug":"vrtk_interactuse","type":"basic","title":"VRTK_InteractUse"}
## Overview The Interact Use script is attached to a Controller object and requires the `VRTK_ControllerEvents` script to be attached as it uses this for listening to the controller button events for using and stop using interactable game objects. It listens for the `AliasUseOn` and `AliasUseOff` events to determine when an object should be used and should stop using. The Controller object also requires the `VRTK_InteractTouch` script to be attached to it as this is used to determine when an interactable object is being touched. Only valid touched objects can be used. An object can be used if the Controller touches a game object which contains the `VRTK_InteractableObject` script and has the flag `isUsable` set to `true`. If a valid interactable object is usable then pressing the set `Use` button on the Controller (default is `Trigger`) will call the `StartUsing` method on the touched interactable object. ## Inspector Parameters * **Use Button:** The button used to use/unuse a touched object. * **Controller Events:** The controller to listen for the events on. If the script is being applied onto a controller then this parameter can be left blank as it will be auto populated by the controller the script is on at runtime. * **Interact Touch:** The Interact Touch to listen for touches on. If the script is being applied onto a controller then this parameter can be left blank as it will be auto populated by the controller the script is on at runtime. * **Interact Grab:** The Interact Grab to listen for grab actions on. If the script is being applied onto a controller then this parameter can be left blank as it will be auto populated by the controller the script is on at runtime. ## Class Events * `UseButtonPressed` - Emitted when the use toggle alias button is pressed. * `UseButtonReleased` - Emitted when the use toggle alias button is released. * `ControllerStartUseInteractableObject` - Emitted when a use of a valid object is started. * `ControllerUseInteractableObject` - Emitted when a valid object starts being used. * `ControllerStartUnuseInteractableObject` - Emitted when a unuse of a valid object is started. * `ControllerUnuseInteractableObject` - Emitted when a valid object stops being used. ## Unity Events Adding the `VRTK_InteractUse_UnityEvents` component to `VRTK_InteractUse` object allows access to `UnityEvents` that will react identically to the Class Events. * All C# delegate events are mapped to a Unity Event with the `On` prefix. e.g. `MyEvent` -> `OnMyEvent`. ## Class Methods ### IsUseButtonPressed/0 > `public virtual bool IsUseButtonPressed()` * Parameters * _none_ * Returns * `bool` - Returns true if the use alias button is being held down. The IsUsebuttonPressed method determines whether the current use alias button is being pressed down. ### GetUsingObject/0 > `public virtual GameObject GetUsingObject()` * Parameters * _none_ * Returns * `GameObject` - The game object of what is currently being used by this controller. The GetUsingObject method returns the current object being used by the controller. ### ForceStopUsing/0 > `public virtual void ForceStopUsing()` * Parameters * _none_ * Returns * _none_ The ForceStopUsing method will force the controller to stop using the currently touched object and will also stop the object's using action. ### ForceResetUsing/0 > `public virtual void ForceResetUsing()` * Parameters * _none_ * Returns * _none_ The ForceResetUsing will force the controller to stop using the currently touched object but the object will continue with it's existing using action. ### AttemptUse/0 > `public virtual void AttemptUse()` * Parameters * _none_ * Returns * _none_ The AttemptUse method will attempt to use the currently touched object without needing to press the use button on the controller. ## Example `VRTK/Examples/006_Controller_UsingADoor` simulates using a door object to open and close it. It also has a cube on the floor that can be grabbed to show how interactable objects can be usable or grabbable. `VRTK/Examples/008_Controller_UsingAGrabbedObject` shows that objects can be grabbed with one button and used with another (e.g. firing a gun).