2using System.Collections;
3using System.Collections.Generic;
13using ViveHandTracking;
20 private bool IsSelected =
false;
25 private Camera playerCamera;
26 private LineRenderer lineRenderer =
null;
27 private GameObject currentObject =
null;
30 public SteamVR_Action_Boolean
uiInteractAction = SteamVR_Input.GetAction<SteamVR_Action_Boolean>(
"InteractUI");
33 public bool IsLeft =
false;
34 public GestureType selectGesture = GestureType.Like;
39 lineRenderer = GetComponent<LineRenderer>();
40 playerCamera = GetComponent<Camera>();
52 GetComponentInChildren<SpriteRenderer>().enabled =
false;
53 lineRenderer.enabled =
false;
61 GetComponentInChildren<SpriteRenderer>().enabled =
true;
63 if (GestureProvider.Current.engine.State.LeftHand.gesture == GestureType.Victory && Time.time >
time)
69 time = Time.time+1.0f;
94 GetComponentInChildren<SpriteRenderer>().enabled =
false;
97 IEnumerator ClickButton(
Button b)
99 var pointer =
new PointerEventData(EventSystem.current);
101 ExecuteEvents.Execute(b.gameObject, pointer, ExecuteEvents.pointerEnterHandler);
102 ExecuteEvents.Execute(b.gameObject, pointer, ExecuteEvents.submitHandler);
104 yield
return new WaitForSeconds(0.1f);
105 ExecuteEvents.Execute(b.gameObject, pointer, ExecuteEvents.pointerExitHandler);
107 IEnumerator WaitFrame()
111 private void UpdatePointer()
113 Vector3 endPosition = GetEnd();
115 UpdateLength(endPosition);
116 UpdatePointerStatus(endPosition);
119 private void UpdateLength(Vector3 endPosition)
121 lineRenderer.SetPosition(0, transform.position);
122 lineRenderer.SetPosition(1, endPosition);
125 private void UpdatePointerStatus(Vector3 hitPoint)
129 if (currentObject !=
null)
138 float distance = GetDistance();
141 if (distance != 0.0f)
142 return CalculateEnd(distance);
147 private float GetDistance()
149 PointerEventData eventData =
new PointerEventData(
eventSystem);
150 List<RaycastResult> results =
new List<RaycastResult>();
155 eventData.position =
inputModule.inputOverride.mousePosition;
159 eventData.position =
new Vector2(playerCamera.pixelWidth / 2, playerCamera.pixelHeight / 2);
163 RaycastResult closestResult = FindFirstRaycast(results);
164 float distance = closestResult.distance;
165 var backupObject = currentObject;
166 currentObject = closestResult.gameObject;
171 var closest = 9999.9f;
172 foreach (var raycastHit
in rchits)
174 if (raycastHit.transform && closest > raycastHit.distance)
180 closest = raycastHit.distance;
181 currentObject = raycastHit.transform.gameObject;
185 if (closest == 9999.9f)
187 currentObject =
null;
191 if (backupObject !=
null && currentObject != backupObject)
197 lineRenderer.enabled = closest !=
defaultLength && closest != 0;
202 if (currentObject !=
null && closestResult.gameObject != currentObject)
210 lineRenderer.enabled = distance !=
defaultLength && distance != 0;
217 private RaycastResult FindFirstRaycast(List<RaycastResult> results)
219 foreach (RaycastResult result
in results)
221 if (!result.gameObject || !HasParentQuiz(result.gameObject))
227 return new RaycastResult();
230 private bool HasParentQuiz(GameObject go)
234 if (go.CompareTag(
"Quiz"))
247 private Vector3 CalculateEnd(
float length)
249 return transform.position + transform.forward * length;
UnityEngine.UI.Button Button
static DobotEditorManager instance
SteamVR_Action_Boolean uiInteractAction
UnityAction< Vector3, bool > OnPointerUpdate
StandaloneInputModule inputModule
LayerMask interactableMask