/// <summary> /// It saves the reference to objects passed as arguments for later use. /// </summary> /// <param name="isRight">Whether this picker is for right hand.</param> /// <param name="triggerColliderModel">The trigger collider hand model.</param> /// <param name="palmCenterTransform">Transform of the palm center.</param> /// <param name="handControllerSettings">Hand controller settings that allow modification.</param> public void AttachHandController(bool isRight, UnityHandModel triggerColliderModel, Transform palmCenterTransform, IHandControllerSettings handControllerSettings) { if (triggerColliderModel == null) { Debug.LogError("Trigger collider model is null"); return; } int n = triggerColliderModel.Fingers.Length; for (int i = 0; i < n; i++) { UnityFingerModel fingerModel = triggerColliderModel.Fingers[i]; IFingerTriggerColliderManager manager = fingerModel.Finger.GetComponent <IFingerTriggerColliderManager>(); if (manager == null) { Debug.LogErrorFormat("Unable to find trigger collider manager on finger {0}", i); } _fingerTriggers[i] = manager; } PalmCenter = palmCenterTransform; _handRootTransform = triggerColliderModel.HandRootTransform; _initialized = true; FindSnapper(isRight, _handRootTransform, palmCenterTransform, handControllerSettings); FindTriggeringTouchableManager(triggerColliderModel.Hand); }
/// <summary> /// Update touched object's color if needed. /// </summary> private void UpdateTouchedObjectColor() { _touchableSet.Clear(); int n = _fingerTriggers.Length; // Collect all objects touched with finger colliders. for (int i = 0; i < n; i++) { IFingerTriggerColliderManager fingerTrigger = _fingerTriggers[i]; if (fingerTrigger == null) { Debug.LogError("Finger trigger is null."); return; } HashSet <ITouchableForceFeedback> fingerTouchableSet; if (fingerTrigger.CheckTouching(out fingerTouchableSet)) { _touchableSet.UnionWithCast(fingerTouchableSet); } } // Collect all objects touched by picking prediction indicator. if (_pickingPredictionIndicatorManager != null) { HashSet <ITouchableForceFeedback> triggeringTouchable = _pickingPredictionIndicatorManager.GetTriggeringObject(); _touchableSet.UnionWithCast(triggeringTouchable); } // Update color. _colorModifier.UpdateTouchedObjectColor(_touchableSet); }