{{tag>dragonscript behavior}}
[[:start|Start Page]] >> [[main|DragonScript Scripting Language]] >> [[abstractions#behavior_elementsquick_and_easy_development|Behavior Elements: Quick and Easy Development]] >> **ECBehaviorVRHandPointAt**
* [[behaviors_use_cases|Behaviors Explained: By Use-Case]]
* [[behaviors_a_to_z|Behaviors Explained: From A to Z]]
====== ECBehaviorVRHandPointAt ======
Behavior adding support to VR Hand behavior to know what element they are pointing at.
Behavior uses one collider collision test located attached controller collider facing forward.
If hand component is present and a test bone is set the collision test will be attached to the component bone.
By default the test direction is rotated by -45 degrees along the X axis. This accounts for VR hand controllers typically having their Z axis along the grip direction. This causes the point at detection to point 45 degrees upwards. For easier usage rotating the point at detection direction downwards by 45 degrees helps.
By default point-at is disabled for backwards compatibility.
====== Instance Counts ======
This behavior can be added twice to an element to add support for left and right hand controller. Use the behavior identifier to tell them apart.
====== Element Class Properties ======
Element class properties have the prefix **vrHandPointAt.** or **vrHandPointAt(id).** if id is not empty.
===== range =====
Range in meters to test for objects supporting to be pointed at.
* Full name: "vrHandPointAt.range" or "vrHandPointAt(id).range"
* Type: float
* Restrictions: Large than or equal to 0
* Default Value: 2
* Example (*.deeclass): 3.5
===== origin =====
Test origin relative to hand controller coordinate system.
* Full name: "vrHandPointAt.origin" or "vrHandPointAt(id).origin"
* Type: vector
* Default value: //(0, 0, 0)//
* Example (*.deeclass):
===== rotation =====
Test rotation in degrees relative to hand controller coordinate system.
* Full name: "vrHandPointAt.rotation" or "vrHandPointAt(id).rotation"
* Type: vector
* Default value: //(0, 0, 0)//
* Example (*.deeclass):
===== bone =====
Name of bone in controller model to attach to or empty string to attach to the controller itself.
* Full name: "vrHandPointAt.bone" or "vrHandPointAt(id).bone"
* Type: string
* Default Value: //""//
* Example (*.deeclass): indexFinger
====== Required Behaviors ======
* [[behavior_vrhand|ECBehaviorVRHand]]
====== Optional Behaviors ======
This behavior does not support optional behaviors.
====== Persistency ======
Saves these parameters:
* Range
* Test origin
* Test rotation
====== API Documentation ======
#@LinkApiDocDEDS2_HTML~classDragengine_1_1Scenery_1_1ECBehaviorVRHand.html,ECBehaviorVRHand~@#.
Since DragonScript Module Version **1.7**
====== Use Cases ======
* Test what objects in the world the player is pointing at
====== Element Class Example ======
The following example creates an element class with support to test what element the player is pointing at:
class MyElement extends BehaviorElementClass
public var ECBehaviorVRPlayspace vrPlayspace
public var ECBehaviorVRHand vrHandRight
public var ECBehaviorVRHand vrHandLeft
public var ECBehaviorVRHandPointAt vrRightHandPointAt
public var ECBehaviorVRHandPointAt vrLeftHandPointAt
public func new()
// Create playspace
vrPlayspace = ECBehaviorVRPlayspace.new(this)
// Create hand controllers. The InputDeviceType indicates what device type
// to monitor. vrRightHand and vrLeftHand can exist only once
vrHandRight = ECBehaviorVRHand.new(this, vrPlayspace, InputDeviceType.vrRightHand, "right")
vrHandLeft = ECBehaviorVRHand.new(this, vrPlayspace, InputDeviceType.vrLeftHand, "left")
// Create point at behavior for each hand. By default the test direction
// is along the controller Z axis. For common controllers this points
// along the handle direction which is like holding a sword or similar
vrRightHandPointAt = ECBehaviorVRHandPointAt.new(this, vrRightHand, "right")
vrLeftHandPointAt = ECBehaviorVRHandPointAt.new(this, vrLeftHand, "left")
// If you have a ECBehaviorCollider in your element class it is a good idea
// to ignore this collider. This avoids the point hitting the player body
// or hands.
// vrRightHandPointAt.setIgnoreCollider(collider)
// vrLeftHandPointAt.setIgnoreCollider(collider)
end
end
The #@LinkApiDocDEDS2_HTML~classDragengine_1_1Scenery_1_1BaseVRActorClass.html,BaseVRActorClass~@# provides full VR support including ECBehaviorVRHandPointAt for both hands.
====== Live Examples ======
* [[https://github.com/LordOfDragons/deexamples|DEExamples Repository]]: ExampleVR project.