void MoveCameraSafely(Vector3 newCameraPosition, CameraDirections direction) { // an example of moving the camera only if it doesn't make space outside the background visible bool safe = false; switch (direction) { case CameraDirections.Up: safe = !PointIsVisibleToCamera(new Vector2(Camera.main.transform.position.x, MaxTopEdge - cameraSpeed)); break; case CameraDirections.Down: safe = !PointIsVisibleToCamera(new Vector2(Camera.main.transform.position.x, MaxBottomEdge + cameraSpeed)); break; case CameraDirections.Left: safe = !PointIsVisibleToCamera(new Vector2(MaxLeftEdge + cameraSpeed, Camera.main.transform.position.y)); break; case CameraDirections.Right: safe = !PointIsVisibleToCamera(new Vector2(MaxRightEdge - cameraSpeed, Camera.main.transform.position.y)); break; } if (safe) { Camera.main.transform.position = newCameraPosition; } PlaceUI(); }
public void moveCamera(CameraDirections direction) { switch (direction) { case CameraDirections.FORWARD: m_firstPersonCameraPosition += GetEyeSpaceForwardVector() * m_cameraMoveSpeed; break; case CameraDirections.BACK: m_firstPersonCameraPosition -= GetEyeSpaceForwardVector() * m_cameraMoveSpeed; break; case CameraDirections.LEFT: m_firstPersonCameraPosition -= GetEyeSpaceRightVector() * m_cameraMoveSpeed; break; case CameraDirections.RIGHT: m_firstPersonCameraPosition += GetEyeSpaceRightVector() * m_cameraMoveSpeed; break; } }
// these methods are accessible from anywhere in your game as long as there is an instance of this script available // you access them like the following example: // ResolutionManager.Instance.MoveCamera(CameraDirections.Up, 0.5f); public void MoveCamera(CameraDirections direction, float moveDistance, bool moveSafely = false) { // move the camera in the specified direction and the specified distance // if RestrictScreenToBackground or moveSafely is true the camera will only move if the movement won't cause content outside the background region to show on the screen Vector3 newCameraPos = Camera.main.transform.position; switch (direction) // to move it two directions (e.g. up and left), call this function for each direction separately { case CameraDirections.Up: newCameraPos = new Vector3(Camera.main.transform.position.x, Camera.main.transform.position.y + moveDistance, -10f); break; case CameraDirections.Down: newCameraPos = new Vector3(Camera.main.transform.position.x, Camera.main.transform.position.y - moveDistance, -10f); break; case CameraDirections.Left: newCameraPos = new Vector3(Camera.main.transform.position.x - moveDistance, Camera.main.transform.position.y, -10f); break; case CameraDirections.Right: newCameraPos = new Vector3(Camera.main.transform.position.x + moveDistance, Camera.main.transform.position.y, -10f); break; } if (RestrictScreenToBackground || moveSafely) { MoveCameraSafely(newCameraPos, direction); // only move the camera if the movement will not reveal space outside the background area } else { MoveCameraUnsafely(newCameraPos); // move the camera regardless } PlaceUI(); }