using UnityEngine; namespace Es.Utility { [RequireComponent(typeof(Camera))] public class SceneViewCamera : MonoBehaviour { [SerializeField] [Range(0.1f, 100f)] private float wheelSpeed = 1f; [SerializeField] [Range(0.1f, 100f)] private float moveSpeed = 0.3f; [SerializeField] [Range(0.1f, 1f)] private float rotateSpeed = 0.3f; private Vector3 preMousePos; private void Update() { MouseUpdate(); } private void MouseUpdate() { float axis = Input.GetAxis("Mouse ScrollWheel"); if (axis != 0f) { MouseWheel(axis); } if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1) || Input.GetMouseButtonDown(2)) { preMousePos = Input.mousePosition; } MouseDrag(Input.mousePosition); } private void MouseWheel(float delta) { base.transform.position += base.transform.forward * delta * wheelSpeed; } private void MouseDrag(Vector3 mousePos) { Vector3 vector = mousePos - preMousePos; if (!(vector.magnitude < 1E-05f)) { if (Input.GetMouseButton(2)) { base.transform.Translate(-vector * Time.deltaTime * moveSpeed); } else if (Input.GetMouseButton(1)) { CameraRotate(new Vector2(0f - vector.y, vector.x) * rotateSpeed); } preMousePos = mousePos; } } public void CameraRotate(Vector2 angle) { base.transform.RotateAround(base.transform.position, base.transform.right, angle.x); base.transform.RotateAround(base.transform.position, Vector3.up, angle.y); } } }