Tanoda
SceneViewCamera.cs
Go to the documentation of this file.
1using UnityEngine;
2
3namespace Es.Utility
4{
8 [RequireComponent(typeof(Camera))]
9 public class SceneViewCamera : MonoBehaviour
10 {
11 [SerializeField] [Range(0.1f, 100f)] private float wheelSpeed = 1f;
12
13 [SerializeField] [Range(0.1f, 100f)] private float moveSpeed = 0.3f;
14
15 [SerializeField] [Range(0.1f, 1f)] private float rotateSpeed = 0.3f;
16
17 private Vector3 preMousePos;
18
19 private void Update()
20 {
21 MouseUpdate();
22 }
23
24 private void MouseUpdate()
25 {
26 var scrollWheel = Input.GetAxis("Mouse ScrollWheel");
27 if (scrollWheel != 0.0f)
28 MouseWheel(scrollWheel);
29
30 if (Input.GetMouseButtonDown(0) ||
31 Input.GetMouseButtonDown(1) ||
32 Input.GetMouseButtonDown(2))
33 preMousePos = Input.mousePosition;
34
35 MouseDrag(Input.mousePosition);
36 }
37
38 private void MouseWheel(float delta)
39 {
40 transform.position += transform.forward * delta * wheelSpeed;
41 }
42
43 private void MouseDrag(Vector3 mousePos)
44 {
45 var diff = mousePos - preMousePos;
46
47 if (diff.magnitude < Vector3.kEpsilon)
48 return;
49
50 if (Input.GetMouseButton(2))
51 transform.Translate(-diff * Time.deltaTime * moveSpeed);
52 else if (Input.GetMouseButton(1))
53 CameraRotate(new Vector2(-diff.y, diff.x) * rotateSpeed);
54
55 preMousePos = mousePos;
56 }
57
58 public void CameraRotate(Vector2 angle)
59 {
60 transform.RotateAround(transform.position, transform.right, angle.x);
61 transform.RotateAround(transform.position, Vector3.up, angle.y);
62 }
63 }
64}
Make it possible to operate cameras like Scene view in Game view.
void CameraRotate(Vector2 angle)