void SetOffset(Vector2 offset) { VROverlay overlay = target as VROverlay; overlay.offsetOnSelf = new Vector3(offset.x, offset.y, 0); overlay.UpdateLine(); }
Vector3 findPositiontOnPRojectionFromSelf(VROverlay overlay) { RaycastHit hit; if (Physics.Raycast(overlay.transform.position, overlay.transform.position.normalized, out hit, 100.0f)) { return(hit.point); } else { return(overlay.transform.position); } }
public override void OnInspectorGUI() { if (GUILayout.Button("UPDATE")) { Object[] overlays = targets; foreach (Object overlayObject in overlays) { VROverlay overlay = overlayObject as VROverlay; Vector3 newPos = findPositiontOnPRojectionFromSelf(overlay).normalized *overlay.distance; overlay.transform.position = newPos; overlay.transform.LookAt(Vector3.zero); overlay.transform.Rotate(new Vector3(0, 180, 0)); overlay.UpdateLine(); } } VROverlay overlay_ = target as VROverlay; RectTransform rtransform = overlay_.GetComponent <RectTransform>(); GUILayout.BeginHorizontal(); if (GUILayout.Button("<")) { SetOffset(new Vector2(rtransform.rect.xMin, 0)); } if (GUILayout.Button("^")) { SetOffset(new Vector2(0, rtransform.rect.yMax)); } if (GUILayout.Button("v")) { SetOffset(new Vector2(0, rtransform.rect.yMin)); } if (GUILayout.Button(">")) { SetOffset(new Vector2(rtransform.rect.xMax, 0)); } if (GUILayout.Button("RESET ON PROJECTION")) { overlay_.positionOnProjection = overlay_.transform.position + new Vector3(0, 0.1f, 0); } GUILayout.EndHorizontal(); this.DrawDefaultInspector(); }
void OnSceneGUI() { VROverlay overlay = (VROverlay)target; // Position Vector3 pos = Handles.FreeMoveHandle(overlay.transform.position, Quaternion.identity, .01f, new Vector3(.5f, .5f, .5f), Handles.SphereCap); Quaternion rot = overlay.transform.rotation; if (pos != overlay.transform.position) { pos = findPositiontOnProjectionFromCamera(pos, out rot).normalized *overlay.distance; overlay.transform.position = pos; overlay.transform.LookAt(Vector3.zero); overlay.transform.Rotate(new Vector3(0, 180, 0)); } // Line end on Projection Vector3 posOnProj = Handles.FreeMoveHandle(overlay.positionOnProjection, Quaternion.identity, .01f, new Vector3(.5f, .5f, .5f), Handles.SphereCap); if (posOnProj != overlay.positionOnProjection) { posOnProj = findPositiontOnProjectionFromCamera(posOnProj, out rot); overlay.positionOnProjection = posOnProj; } // Offset Vector3 offset = overlay.transform.TransformPoint(overlay.offsetOnSelf); /*if (!showOffset) { * showOffset = Handles.Button(offset, overlay.transform.rotation, 0.01f, 0.01f, Handles.CircleCap); * } * else { * offset = Handles.PositionHandle(offset, overlay.transform.rotation); * }*/ offset = Handles.FreeMoveHandle(offset, Quaternion.identity, .003f, new Vector3(.5f, .5f, .5f), Handles.CircleCap); // Snap Offset offset = overlay.transform.InverseTransformPoint(offset); offset.z = 0; float snapOffset = 20; RectTransform rtransform = overlay.GetComponent <RectTransform>(); float xMax = rtransform.rect.xMax; float xMin = rtransform.rect.xMin; if (offset.x > xMax - snapOffset && offset.x < xMax + snapOffset) { offset.x = xMax; } if (offset.x > xMin - snapOffset && offset.x < xMin + snapOffset) { offset.x = xMin; } float yMax = rtransform.rect.yMax; float yMin = rtransform.rect.yMin; if (offset.y > yMax - snapOffset && offset.y < yMax + snapOffset) { offset.y = yMax; } if (offset.y > yMin - snapOffset && offset.y < yMin + snapOffset) { offset.y = yMin; } Vector3 topLeft = new Vector3(xMin - snapOffset, yMax + snapOffset, 0); Vector3 topRight = new Vector3(xMax + snapOffset, yMax + snapOffset, 0); Vector3 bottomLeft = new Vector3(xMin - snapOffset, yMin - snapOffset, 0); Vector3 bottomRight = new Vector3(xMax + snapOffset, yMin - snapOffset, 0); topLeft = overlay.transform.TransformPoint(topLeft); topRight = overlay.transform.TransformPoint(topRight); bottomLeft = overlay.transform.TransformPoint(bottomLeft); bottomRight = overlay.transform.TransformPoint(bottomRight); Handles.DrawLine(topLeft, topRight); Handles.DrawLine(topLeft, bottomLeft); Handles.DrawLine(bottomRight, topRight); Handles.DrawLine(bottomRight, bottomLeft); if (offset != overlay.offsetOnSelf) { overlay.offsetOnSelf = offset; overlay.UpdateLine(); } overlay.UpdateLine(); // draw line to projection sphere Handles.DrawLine(overlay.transform.position, findPositiontOnPRojectionFromSelf(overlay)); EditorUtility.SetDirty(target); Event e = Event.current; switch (e.type) { case EventType.keyDown: { if (Event.current.keyCode == (KeyCode.K)) { //Debug.Log("Key"); //SceneView.lastActiveSceneView.camera.transform.position = Vector3.zero; SceneView.lastActiveSceneView.pivot = Vector3.zero; SceneView.lastActiveSceneView.Repaint(); } break; } } }