private void toggleChange() { if (!camToggle.isOn) { if (PlanetarySelectionController.isPlanetSelected()) { transform.localPosition = Vector3.Normalize(transform.localPosition) * 500; } else { transform.localPosition = Vector3.Normalize(transform.localPosition) * 25; } } else { if (PlanetarySelectionController.isPlanetSelected()) { transform.localPosition = Vector3.Normalize(transform.localPosition) * Mathf.Clamp(Magnitude, 200, 700); } else { transform.localPosition = Vector3.Normalize(transform.localPosition) * Mathf.Clamp(Magnitude, 15, 700); } } }
void LateUpdate() { if (!IsLocked) { float angleX; // Spherical camera with limited rotation if (Input.GetMouseButton(2)) { GameObject dummyCamera = Instantiate(transform.gameObject); Transform dummyTransform = dummyCamera.transform; dummyTransform.SetParent(transform.parent, false); dummyTransform.RotateAround(transform.parent.position, Vector3.up, Input.GetAxis("Mouse X") * 2); dummyTransform.RotateAround(transform.parent.position, dummyTransform.right, Input.GetAxis("Mouse Y") * -2); dummyTransform.rotation = Quaternion.Euler(dummyTransform.rotation.eulerAngles.x, dummyTransform.rotation.eulerAngles.y, 0); angleX = dummyTransform.rotation.eulerAngles.x; if ((0 <= angleX && angleX <= 70) || (290 <= angleX && angleX < 360)) { transform.LookAt(transform.parent); transform.localPosition = dummyTransform.localPosition; transform.localRotation = dummyTransform.localRotation; } Destroy(dummyCamera); } else { // Zoom with scrollwheel float scroll = Input.GetAxis("Mouse ScrollWheel"); Magnitude = Vector3.Magnitude(transform.localPosition); if (scroll > 0) { if (camToggle.isOn && Magnitude > 15) { transform.localPosition -= 0.1f * transform.localPosition * Input.mouseScrollDelta.y; } else if (PlanetarySelectionController.isPlanetSelected()) { if (Magnitude > 200) { transform.localPosition -= 0.1f * transform.localPosition * Input.mouseScrollDelta.y; } } //Minimal distance from camera equal to selection bounds else if (Magnitude > PlanetarySelectionController.Selection .GetComponent <MeshCollider>().bounds.size.z) { transform.localPosition -= 0.1f * transform.localPosition * Input.mouseScrollDelta.y; } } else if (scroll < 0) { if (camToggle.isOn && Magnitude < 700) { transform.localPosition -= 0.1f * transform.localPosition * Input.mouseScrollDelta.y; } else if (PlanetarySelectionController.Selection.name == "Planet" && Magnitude < 700) { transform.localPosition -= 0.1f * transform.localPosition * Input.mouseScrollDelta.y; } else if (Magnitude < 50) { transform.localPosition -= 0.1f * transform.localPosition * Input.mouseScrollDelta.y; } } angleX = transform.rotation.eulerAngles.x; // Moving free camera if (camToggle.isOn) { float speed = 0.1f; speed += Magnitude; Vector3 freeCamForward = new Vector3(transform.forward.x, 0, transform.forward.z); if (Input.mousePosition.y >= Screen.height * 0.975) { transform.parent.Translate(freeCamForward * Time.deltaTime * speed, Space.World); } else if (Input.mousePosition.y <= Screen.height * 0.025) { transform.parent.Translate(-freeCamForward * Time.deltaTime * speed, Space.World); } if (Input.mousePosition.x >= Screen.width * 0.975) { transform.parent.Translate(transform.right * Time.deltaTime * speed, Space.World); } else if (Input.mousePosition.x <= Screen.width * 0.025) { transform.parent.Translate(-transform.right * Time.deltaTime * speed, Space.World); } } } } // Grid displayed dependent on camera altitude if (transform.position.y < 100 && grid.activeSelf) { detailedGrid.SetActive(true); grid.SetActive(false); } else if (transform.position.y > 100 && detailedGrid.activeSelf) { detailedGrid.SetActive(false); grid.SetActive(true); } }