Skip to content

Commit

Permalink
fix(Pointer): unparent simple pointer holder to fix scaling issue
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
thestonefox committed Dec 28, 2016
1 parent 09aab3c commit 7e4cd63
Showing 1 changed file with 25 additions and 18 deletions.
43 changes: 25 additions & 18 deletions Assets/VRTK/Scripts/Pointers/VRTK_SimplePointer.cs
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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<BoxCollider>().isTrigger = true;
pointer.AddComponent<Rigidbody>().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<BoxCollider>().isTrigger = true;
pointerBeam.AddComponent<Rigidbody>().isKinematic = true;
pointerBeam.layer = LayerMask.NameToLayer("Ignore Raycast");

var pointerRenderer = pointer.GetComponent<MeshRenderer>();
var pointerRenderer = pointerBeam.GetComponent<MeshRenderer>();
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)
{
Expand Down Expand Up @@ -158,22 +157,28 @@ protected override void SetPointerMaterial(Color color)
{
base.SetPointerMaterial(color);

base.ChangeMaterialColor(pointer, color);
base.ChangeMaterialColor(pointerBeam, color);
base.ChangeMaterialColor(pointerTip, color);
}

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<Renderer>() && pointerVisibility == pointerVisibilityStates.Always_Off)
if (pointerBeam && pointerBeam.GetComponent<Renderer>() && pointerVisibility == pointerVisibilityStates.Always_Off)
{
pointer.GetComponent<Renderer>().enabled = false;
pointerBeam.GetComponent<Renderer>().enabled = false;
}
}

Expand All @@ -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);
}

Expand Down

0 comments on commit 7e4cd63

Please sign in to comment.