AnalyzationResult AnalyzeQuad(GUIQuad quad) { var result = new AnalyzationResult(); var quadCollider = quad.GetComponent <Collider>(); if (quadCollider == null) { return(result); } var normal = -quad.transform.forward; var pos = quad.transform.position; var tip = TipPosition; bool behind = Vector3.Dot(tip - pos, normal) < 0; // We're on the right side var dir = -normal; var origin = !behind ? tip : pos + Vector3.Reflect(tip - pos, normal); RaycastHit hitInfo; if (quadCollider.Raycast(new Ray(origin, dir), out hitInfo, 1.5f)) { var maxHeight = behind ? MAX_DEPTH : HOVER_HEIGHT; if (hitInfo.distance <= maxHeight) { // IN! result.Position = behind ? RelativePosition.Behind : RelativePosition.Hover; } result.TextureCoords = hitInfo.textureCoord; } else { // OUT! result.Position = RelativePosition.Out; } //VRLog.Error(closestPoint); //RaycastHit hitInfo; //if(quadCollider.Raycast(new Ray(tip, (tip - closestPoint).normalized ), out hitInfo, 1.5f)) //{ // result.TextureCoords = hitInfo.textureCoord; //} else //{ // VRLog.Error("Raycast missed its target!"); //} return(result); }
private void EnsureResizeHandler() { if (!_ResizeHandler) { _ResizeHandler = _Target.GetComponent <ResizeHandler>(); if (!_ResizeHandler) { _ResizeHandler = _Target.gameObject.AddComponent <ResizeHandler>(); } } }
private bool Raycast(GUIQuad quad, out RaycastHit hit) { Vector3 position = Laser.transform.position; Vector3 forward = Laser.transform.forward; Collider component = quad.GetComponent <Collider>(); if (component) { var ray = new Ray(position, forward); return(component.Raycast(ray, out hit, GetRange(quad))); } hit = default; return(false); }
private bool Raycast(GUIQuad quad, out RaycastHit hit) { var myPos = Laser.transform.position; var laser = Laser.transform.forward; var collider = quad.GetComponent <Collider>(); if (collider) { var ray = new Ray(myPos, laser); // So far so good. Now raycast! return(collider.Raycast(ray, out hit, GetRange(quad))); } else { hit = new RaycastHit(); return(false); } }