/// <inheritdoc /> public override void Update() { foreach (JointKinematicBody jointKinematicBody in jointKinematicBodies) { if (HandJointService.IsHandTracked(jointKinematicBody.HandednessType)) { jointKinematicBody.Joint = jointKinematicBody.Joint ?? HandJointService.RequestJointTransform(jointKinematicBody.JointType, jointKinematicBody.HandednessType); jointKinematicBody.UpdateState(jointKinematicBody.Joint != null); } else { jointKinematicBody.UpdateState(false); } } }
/// <inheritdoc /> public override void Update() { using (UpdatePerfMarker.Auto()) { base.Update(); foreach (JointKinematicBody jointKinematicBody in jointKinematicBodies) { if (HandJointService.IsHandTracked(jointKinematicBody.HandednessType)) { jointKinematicBody.Joint = jointKinematicBody.Joint != null ? jointKinematicBody.Joint : HandJointService.RequestJointTransform(jointKinematicBody.JointType, jointKinematicBody.HandednessType); jointKinematicBody.UpdateState(jointKinematicBody.Joint != null); } else { jointKinematicBody.UpdateState(false); } } } }
/// <summary> /// Returns true if the solver handler's transform target is not valid /// </summary> /// <returns>true if not tracking valid hands and/or target, false otherwise</returns> private bool IsInvalidTracking() { if (this.trackingTarget == null) { return(true); } // If we were tracking a particular hand, check that our transform is still valid // The HandJointService does not destroy it's own hand joint tracked GameObjects even when a hand is no longer tracked // Those HandJointService's GameObjects though are the parents of our tracked transform and thus will not be null/destroyed if (this.TrackedTargetType == TrackedObjectType.HandJoint && this.currentTrackedHandedness != Handedness.None) { bool trackingLeft = HandJointService.IsHandTracked(Handedness.Left); bool trackingRight = HandJointService.IsHandTracked(Handedness.Right); return((this.currentTrackedHandedness == Handedness.Left && !trackingLeft) || (this.currentTrackedHandedness == Handedness.Right && !trackingRight)); } return(false); }
protected virtual void AttachToNewTrackedObject() { this.currentTrackedHandedness = Handedness.None; Transform target = null; if (TrackedTargetType == TrackedObjectType.Head) { target = CameraCache.Main.transform; } else if (TrackedTargetType == TrackedObjectType.MotionController) { if (this.TrackedHandness == Handedness.Both) { this.currentTrackedHandedness = Handedness.Left; target = GetMotionController(Handedness.Left); if (target == null) { this.currentTrackedHandedness = Handedness.Right; target = GetMotionController(Handedness.Right); if (target == null) { this.currentTrackedHandedness = Handedness.None; } } } else { this.currentTrackedHandedness = this.TrackedHandness; target = GetMotionController(this.TrackedHandness); } } else if (TrackedTargetType == TrackedObjectType.HandJoint) { if (HandJointService != null) { this.currentTrackedHandedness = this.TrackedHandness; if (currentTrackedHandedness == Handedness.Both) { if (HandJointService.IsHandTracked(Handedness.Left)) { currentTrackedHandedness = Handedness.Left; } else if (HandJointService.IsHandTracked(Handedness.Right)) { currentTrackedHandedness = Handedness.Right; } else { currentTrackedHandedness = Handedness.None; } } target = HandJointService.RequestJointTransform(this.TrackedHandJoint, currentTrackedHandedness); } } else if (TrackedTargetType == TrackedObjectType.CustomOverride) { target = this.transformOverride; } TrackTransform(target); }