VRTK_MoveTransformGrabAttach
extends VRTK_BaseGrabAttach
Overview
Moves the Transform of the Interactable Object towards the interacting object within specified limits.
To allow unrestricted movement, set the axis limit minimum to
-infinity
and the axis limit maximum toinfinity
.
Script Usage:
- Place the
VRTK_MoveTransformGrabAttach
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
Grab Attach Mechanic Script
parameter to denote use of the grab mechanic.
Inspector Parameters
- Detach Distance: The maximum distance the grabbing object is away from the Interactable Object before it is automatically released.
- Tracking Speed: The speed in which to track the grabbed Interactable Object to the interacting object.
- Force Kinematic On Grab: If this is checked then it will force the rigidbody on the Interactable Object to be
Kinematic
when the grab occurs. - Release Deceleration Damper: The damper in which to slow the Interactable Object down when released to simulate continued momentum. The higher the number, the faster the Interactable Object will come to a complete stop on release.
- Reset To Orign On Release Speed: The speed in which the Interactable Object returns to it's origin position when released. If the
Reset To Orign On Release Speed
is0f
then the position will not be reset. - X Axis Limits: The minimum and maximum limits the Interactable Object can be moved along the x axis.
- Y Axis Limits: The minimum and maximum limits the Interactable Object can be moved along the y axis.
- Z Axis Limits: The minimum and maximum limits the Interactable Object can be moved along the z axis.
- Min Max Threshold: The threshold the position value needs to be within to register a min or max position value.
- Min Max Normalized Threshold: The threshold the normalized position value needs to be within to register a min or max normalized position value.
Class Variables
public Vector3 localOrigin
- The default local position of the Interactable Object.
Class Events
TransformPositionChanged
- Emitted when the Transform position has changed.XAxisMinLimitReached
- Emitted when the Transform position has reached the X Axis Min Limit.XAxisMinLimitExited
- Emitted when the Transform position has exited the X Axis Min Limit.XAxisMaxLimitReached
- Emitted when the Transform position has reached the X Axis Max Limit.XAxisMaxLimitExited
- Emitted when the Transform position has exited the X Axis Max Limit.YAxisMinLimitReached
- Emitted when the Transform position has reached the Y Axis Min Limit.YAxisMinLimitExited
- Emitted when the Transform position has exited the Y Axis Min Limit.YAxisMaxLimitReached
- Emitted when the Transform position has reached the Y Axis Max Limit.YAxisMaxLimitExited
- Emitted when the Transform position has exited the Y Axis Max Limit.ZAxisMinLimitReached
- Emitted when the Transform position has reached the Z Axis Min Limit.ZAxisMinLimitExited
- Emitted when the Transform position has exited the Z Axis Min Limit.ZAxisMaxLimitReached
- Emitted when the Transform position has reached the Z Axis Max Limit.ZAxisMaxLimitExited
- Emitted when the Transform position has exited the Z Axis Max Limit.
Unity Events
Adding the VRTK_MoveTransformGrabAttach_UnityEvents
component to VRTK_MoveTransformGrabAttach
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
.
Event Payload
GameObject interactingObject
- The GameObject that is performing the interaction (e.g. a controller).Vector3 position
- The current position in relation to the axis limits from the origin position.Vector3 normalizedPosition
- The normalized position (between0f
and1f
) of the Interactable Object in relation to the axis limits.Vector3 currentDirection
- The direction vector that the Interactable Object is currently moving across the axes in.Vector3 originDirection
- The direction vector that the Interactable Object is currently moving across the axes in in relation to the origin position.
Class Methods
StartGrab/3
public override bool StartGrab(GameObject grabbingObject, GameObject givenGrabbedObject, Rigidbody givenControllerAttachPoint)
- Parameters
GameObject grabbingObject
- The GameObject that is doing the grabbing.GameObject givenGrabbedObject
- The GameObject that is being grabbed.Rigidbody givenControllerAttachPoint
- The point on the grabbing object that the grabbed object should be attached to after grab occurs.
- Returns
bool
- Returnstrue
if the grab is successful,false
if the grab is unsuccessful.
The StartGrab method sets up the grab attach mechanic as soon as an Interactable Object is grabbed.
StopGrab/1
public override void StopGrab(bool applyGrabbingObjectVelocity)
- Parameters
bool applyGrabbingObjectVelocity
- Iftrue
will apply the current velocity of the grabbing object to the grabbed object on release.
- Returns
- none
The StopGrab method ends the grab of the current Interactable Object and cleans up the state.
CreateTrackPoint/4
public override Transform CreateTrackPoint(Transform controllerPoint, GameObject currentGrabbedObject, GameObject currentGrabbingObject, ref bool customTrackPoint)
- Parameters
Transform controllerPoint
- The point on the controller where the grab was initiated.GameObject currentGrabbedObject
- The GameObject that is currently being grabbed.GameObject currentGrabbingObject
- The GameObject that is currently doing the grabbing.ref bool customTrackPoint
- A reference to whether the created track point is an auto generated custom object.
- Returns
Transform
- The Transform of the created track point.
The CreateTrackPoint method sets up the point of grab to track on the grabbed object.
ProcessUpdate/0
public override void ProcessUpdate()
- Parameters
- none
- Returns
- none
The ProcessUpdate method is run in every Update method on the Interactable Object.
GetPosition/0
public virtual Vector3 GetPosition()
- Parameters
- none
- Returns
Vector3
- A Vector3 containing the current Transform position in relation to the axis limits.
The GetPosition method returns a Vector3 of the Transform position in relation to the axis limits.
GetNormalizedPosition/0
public virtual Vector3 GetNormalizedPosition()
- Parameters
- none
- Returns
Vector3
- A normalized Vector3 of the Transform position in relation to the axis limits.
The GetNormalizedPosition method returns a Vector3 of the Transform position normalized between 0f
and 1f
in relation to the axis limits.;
GetCurrentDirection/0
public virtual Vector3 GetCurrentDirection()
- Parameters
- none
- Returns
Vector3
- A Vector3 of the direction the Transform is moving across the relevant axis in.
The GetCurrentDirection method returns a Vector3 of the current positive/negative axis direction that the Transform is moving in.
GetDirectionFromOrigin/0
public virtual Vector3 GetDirectionFromOrigin()
- Parameters
- none
- Returns
Vector3
- A Vector3 of the direction the Transform is moving across the relevant axis in relation to the original position.
The GetDirectionFromOrigin method returns a Vector3 of the direction across the axis from the original position.
SetCurrentPosition/2
public virtual void SetCurrentPosition(Vector3 newPosition, float speed)
- Parameters
Vector3 newPosition
- The position to move the Interactable Object to.float speed
- The speed in which to move the Interactable Object.
- Returns
- none
The SetCurrentPosition method sets the position of the Interactable Object to the given new position at the appropriate speed.
ResetPosition/0
public virtual void ResetPosition()
- Parameters
- none
- Returns
- none
The ResetPosition method will move the Interactable Object back to the origin position.
GetWorldLimits/0
public virtual Limits2D[] GetWorldLimits()
- Parameters
- none
- Returns
Limits2D[]
- An array of axis limits in world space.
The GetWorldLimits method returns an array of minimum and maximum axis limits for the Interactable Object in world space.
Updated less than a minute ago