From 7e4cd637bc18949e8e7ced79c7aae8143c37bda9 Mon Sep 17 00:00:00 2001 From: "Theston E. Fox" Date: Wed, 28 Dec 2016 15:37:54 +0000 Subject: [PATCH] fix(Pointer): unparent simple pointer holder to fix scaling issue Previously, the Simple Pointer holder was a child of the controller object meaning any scaling to the parent camera rig would affect the scale of the Simple Pointer holder. This meant that if the camera rig scale was changed during runtime, then the scale of the Simple Pointer would be wrong. The Simple Pointer holder is now a top level object meaning it's scale is not affected by the scaling of any other objects. --- .../Scripts/Pointers/VRTK_SimplePointer.cs | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/Assets/VRTK/Scripts/Pointers/VRTK_SimplePointer.cs b/Assets/VRTK/Scripts/Pointers/VRTK_SimplePointer.cs index ae5341672..5c2496667 100644 --- a/Assets/VRTK/Scripts/Pointers/VRTK_SimplePointer.cs +++ b/Assets/VRTK/Scripts/Pointers/VRTK_SimplePointer.cs @@ -33,7 +33,7 @@ public class VRTK_SimplePointer : VRTK_BasePointer public bool pointerCursorRescaledAlongDistance = false; private GameObject pointerHolder; - private GameObject pointer; + private GameObject pointerBeam; private GameObject pointerTip; private Vector3 pointerTipScale = new Vector3(0.05f, 0.05f, 0.05f); private Vector3 pointerCursorOriginalScale = Vector3.one; @@ -56,7 +56,7 @@ protected override void OnDisable() protected override void Update() { base.Update(); - if (pointer.gameObject.activeSelf) + if (pointerBeam && pointerBeam.activeSelf) { Ray pointerRaycast = new Ray(GetOriginPosition(), GetOriginForward()); RaycastHit pointerCollidedWith; @@ -102,23 +102,22 @@ protected override void UpdateObjectInteractor() protected override void InitPointer() { pointerHolder = new GameObject(string.Format("[{0}]BasePointer_SimplePointer_Holder", gameObject.name)); - pointerHolder.transform.SetParent(transform); pointerHolder.transform.localPosition = Vector3.zero; VRTK_PlayerObject.SetPlayerObject(pointerHolder, VRTK_PlayerObject.ObjectTypes.Pointer); - pointer = GameObject.CreatePrimitive(PrimitiveType.Cube); - pointer.transform.name = string.Format("[{0}]BasePointer_SimplePointer_Pointer", gameObject.name); - pointer.transform.SetParent(pointerHolder.transform); - pointer.GetComponent().isTrigger = true; - pointer.AddComponent().isKinematic = true; - pointer.layer = LayerMask.NameToLayer("Ignore Raycast"); + pointerBeam = GameObject.CreatePrimitive(PrimitiveType.Cube); + pointerBeam.transform.name = string.Format("[{0}]BasePointer_SimplePointer_Pointer", gameObject.name); + pointerBeam.transform.SetParent(pointerHolder.transform); + pointerBeam.GetComponent().isTrigger = true; + pointerBeam.AddComponent().isKinematic = true; + pointerBeam.layer = LayerMask.NameToLayer("Ignore Raycast"); - var pointerRenderer = pointer.GetComponent(); + var pointerRenderer = pointerBeam.GetComponent(); pointerRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; pointerRenderer.receiveShadows = false; pointerRenderer.material = pointerMaterial; - VRTK_PlayerObject.SetPlayerObject(pointer, VRTK_PlayerObject.ObjectTypes.Pointer); + VRTK_PlayerObject.SetPlayerObject(pointerBeam, VRTK_PlayerObject.ObjectTypes.Pointer); if (customPointerCursor) { @@ -158,7 +157,7 @@ protected override void SetPointerMaterial(Color color) { base.SetPointerMaterial(color); - base.ChangeMaterialColor(pointer, color); + base.ChangeMaterialColor(pointerBeam, color); base.ChangeMaterialColor(pointerTip, color); } @@ -166,14 +165,20 @@ protected override void TogglePointer(bool state) { state = (pointerVisibility == pointerVisibilityStates.Always_On ? true : state); base.TogglePointer(state); - pointer.gameObject.SetActive(state); + if (pointerBeam) + { + pointerBeam.SetActive(state); + } var tipState = (showPointerTip ? state : false); - pointerTip.gameObject.SetActive(tipState); + if (pointerTip) + { + pointerTip.SetActive(tipState); + } - if (pointer.GetComponent() && pointerVisibility == pointerVisibilityStates.Always_Off) + if (pointerBeam && pointerBeam.GetComponent() && pointerVisibility == pointerVisibilityStates.Always_Off) { - pointer.GetComponent().enabled = false; + pointerBeam.GetComponent().enabled = false; } } @@ -182,12 +187,14 @@ private void SetPointerTransform(float setLength, float setThicknes) //if the additional decimal isn't added then the beam position glitches var beamPosition = setLength / (2 + 0.00001f); - pointer.transform.localScale = new Vector3(setThicknes, setThicknes, setLength); - pointer.transform.localPosition = new Vector3(0f, 0f, beamPosition); + pointerBeam.transform.localScale = new Vector3(setThicknes, setThicknes, setLength); + pointerBeam.transform.localPosition = new Vector3(0f, 0f, beamPosition); pointerTip.transform.localPosition = new Vector3(0f, 0f, setLength - (pointerTip.transform.localScale.z / 2)); pointerHolder.transform.localPosition = GetOriginLocalPosition(); pointerHolder.transform.localRotation = GetOriginLocalRotation(); + pointerHolder.transform.position = transform.position; + pointerHolder.transform.rotation = transform.rotation; base.UpdateDependencies(pointerTip.transform.position); }