public void Update() { GameObject selectionGameObject = CheckForSelection(); if (!selection) { if (selectionGameObject) { RUISSelectable selectableObject = selectionGameObject.GetComponent <RUISSelectable>(); //also search in parents if we didn't find RUISSelectable on this gameobject to allow for multi-piece collider hierarchies while (!selectableObject && selectionGameObject.transform.parent != null) { selectionGameObject = selectionGameObject.transform.parent.gameObject; selectableObject = selectionGameObject.GetComponent <RUISSelectable>(); } if (selectableObject && !selectableObject.isSelected) { if (selectableObject != highlightedObject) { if (highlightedObject != null) { highlightedObject.OnSelectionHighlightEnd(); } selectableObject.OnSelectionHighlight(); highlightedObject = selectableObject; } if ((!grabWhileButtonDown && wand.SelectionButtonWasPressed()) || (grabWhileButtonDown && wand.SelectionButtonIsDown())) { selection = selectableObject; if (highlightedObject != null) { highlightedObject.OnSelectionHighlightEnd(); highlightedObject = null; } BeginSelection(); selectionButtonReleasedAfterSelection = false; } } } if (!selectionGameObject || !selectionGameObject.GetComponent <RUISSelectable>()) { if (highlightedObject != null) { highlightedObject.OnSelectionHighlightEnd(); highlightedObject = null; } } } else if (wand.SelectionButtonWasReleased()) { if (!toggleSelection || (toggleSelection && selectionButtonReleasedAfterSelection) || !wand.IsSelectionButtonStandard()) { EndSelection(); } else { selectionButtonReleasedAfterSelection = true; } } }