public virtual void OnPointerOut(DepthPointerEventArgs e) { if (PointerOut != null) { PointerOut(this, e); } }
public virtual void OnPointStay(DepthPointerEventArgs e) { if (PointerStay != null) { PointerStay(this, e); } }
void Update() { holder.transform.RotateAround(transform.position, transform.right, rotateAngle - priorRotate); priorRotate = rotateAngle; holder.transform.localPosition = new Vector3(0, shiftDistance, 0); if (isDepthMeasured && !priorMeasured) { holder.SetActive(true); pointer.SetActive(true); hint.SetActive(true); priorMeasured = isDepthMeasured; return; } else if (!isDepthMeasured && priorMeasured) { holder.SetActive(false); pointer.SetActive(false); hint.SetActive(false); priorMeasured = isDepthMeasured; } else if (!isDepthMeasured) { return; } float dist = 100f; Ray raycast = new Ray(holder.transform.position, pointer.transform.forward); RaycastHit hit; bool bHit = Physics.Raycast(raycast, out hit, Mathf.Infinity); hint.transform.position = hit.point; if (previousContact && previousContact == hit.transform) { count++; if (count == 20) { DepthPointerEventArgs args = new DepthPointerEventArgs(); args.distance = hit.distance; args.flags = 0; args.target = previousContact; OnPointStay(args); } } else { count = 0; } if (previousContact && previousContact != hit.transform) { DepthPointerEventArgs args = new DepthPointerEventArgs(); args.distance = 0f; args.flags = 0; args.target = previousContact; OnPointerOut(args); previousContact = null; } if (bHit && previousContact != hit.transform) { DepthPointerEventArgs argsIn = new DepthPointerEventArgs(); argsIn.distance = hit.distance; argsIn.flags = 0; argsIn.target = hit.transform; OnPointerIn(argsIn); previousContact = hit.transform; } if (!bHit) { previousContact = null; } if (bHit) { dist = hit.distance; } bool actionWasActivated = SteamVR_Actions.seeingVR_default_MakeLaserThicker.stateDown; if (actionWasActivated) { pointer.transform.localScale = new Vector3(thickness * 5f, thickness * 5f, dist); } else if (SteamVR_Actions.seeingVR_default_MakeLaserThicker.stateUp) { pointer.transform.localScale = new Vector3(thickness, thickness, dist); } pointer.transform.localPosition = new Vector3(0f, 0f, dist / 2f); pointer.GetComponent <Renderer>().material.color = color; hint.GetComponent <Renderer>().material.color = color; }