diff --git a/Assets/HTC.UnityPlugin/ViveInputUtility/Scripts/Misc/BasicGrabbable.cs b/Assets/HTC.UnityPlugin/ViveInputUtility/Scripts/Misc/BasicGrabbable.cs index 120e100f..96503f4d 100644 --- a/Assets/HTC.UnityPlugin/ViveInputUtility/Scripts/Misc/BasicGrabbable.cs +++ b/Assets/HTC.UnityPlugin/ViveInputUtility/Scripts/Misc/BasicGrabbable.cs @@ -39,6 +39,12 @@ public static Grabber Get(ColliderButtonEventData eventData) public static void Release(Grabber grabber) { + ViveColliderEventCaster caster = grabber.eventData.eventCaster as ViveColliderEventCaster; + if (caster != null && !caster.canGrab) { + caster.canGrab = true; + return; + } + grabber.eventData = null; m_pool.Release(grabber); } @@ -205,8 +211,10 @@ public virtual void OnColliderEventDragStart(ColliderButtonEventData eventData) if (!IsValidGrabButton(eventData)) { return; } if(singleItemGrab) { ViveColliderEventCaster caster = eventData.eventCaster as ViveColliderEventCaster; - if (!caster.canGrab) { return; } - } + if (caster!=null&&!caster.canGrab) { + return; + } + } if (!m_allowMultipleGrabbers) { ClearGrabbers(false); @@ -276,11 +284,9 @@ public void OnColliderEventPressUp(ColliderButtonEventData eventData) ForceRelease(); } if(singleItemGrab) { - if (!IsValidGrabButton(eventData)) { return; } ViveColliderEventCaster caster = eventData.eventCaster as ViveColliderEventCaster; if (isGrabbed) { - caster.canGrab = true; if (m_onDrop != null) { m_onDrop.Invoke(this); diff --git a/Assets/HTC.UnityPlugin/ViveInputUtility/Scripts/Misc/ReticlePoser.cs b/Assets/HTC.UnityPlugin/ViveInputUtility/Scripts/Misc/ReticlePoser.cs index c9010ff7..7edccb89 100644 --- a/Assets/HTC.UnityPlugin/ViveInputUtility/Scripts/Misc/ReticlePoser.cs +++ b/Assets/HTC.UnityPlugin/ViveInputUtility/Scripts/Misc/ReticlePoser.cs @@ -20,7 +20,7 @@ public interface IMaterialChanger public GameObject hitTarget; public float hitDistance; public Material defaultReticleMaterial; - public MeshRenderer[] reticleRenderer; + public Renderer[] reticleRenderer; public bool autoScaleReticle = false; public int sizeInPixels = 50; @@ -34,9 +34,10 @@ protected virtual void Reset() raycaster = tr.GetComponentInChildren(true); } - reticleRenderer = GetComponentsInChildren(true); + reticleRenderer = GetComponentsInChildren(true); } #endif + public Renderer rendererToDisable; protected virtual void LateUpdate() { var points = raycaster.BreakPoints; @@ -47,13 +48,21 @@ protected virtual void LateUpdate() { reticleForDefaultRay.gameObject.SetActive(false); reticleForCurvedRay.gameObject.SetActive(false); + if(rendererToDisable!=null) + { + rendererToDisable.enabled = false; + } return; } var isCurvedRay = raycaster.CurrentSegmentGenerator() != null; if (reticleForDefaultRay != null) { reticleForDefaultRay.gameObject.SetActive(!isCurvedRay); } - if (reticleForCurvedRay != null) { reticleForCurvedRay.gameObject.SetActive(isCurvedRay); } + if (reticleForCurvedRay != null) { + reticleForCurvedRay.gameObject.SetActive(isCurvedRay); + if(rendererToDisable!=null) + rendererToDisable.enabled = isCurvedRay; + } var targetReticle = isCurvedRay ? reticleForCurvedRay : reticleForDefaultRay; if (result.isValid) @@ -111,7 +120,7 @@ private void SetReticleMaterial(Material mat) { if (reticleRenderer == null || reticleRenderer.Length == 0) { return; } - foreach (MeshRenderer mr in reticleRenderer) + foreach (Renderer mr in reticleRenderer) { mr.material = mat; }