1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
using UnityEngine;
public class CameraController : MonoBehaviour
{
public static CameraController instance;
[SerializeField]
private Vector3 velocity = Vector3.zero;
[SerializeField]
private float cameraSpeed = 10f;
[SerializeField]
private float cameraBaseZoom = 10f;
[SerializeField]
private GameObject cameraHolder;
[SerializeField]
private Transform audioListenerObject;
[SerializeField]
private LayerMask zeroMask;
private Vector3 clickMoveOrigin;
private Vector3 cameraOrigin;
private void Awake()
{
instance = this;
}
private void Start()
{
Camera.main.orthographicSize = cameraBaseZoom;
if (audioListenerObject != null)
{
audioListenerObject.position = new Vector3(audioListenerObject.position.x, cameraBaseZoom, audioListenerObject.position.z);
}
}
private void Update()
{
UpdateMovement();
UpdateZoom();
}
private void UpdateMovement()
{
if (Input.GetKeyDown(KeyCode.C))
{
base.transform.position = Vector3.zero;
}
if (Input.GetMouseButtonDown(1) && Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out var hitInfo, 2000f, zeroMask, QueryTriggerInteraction.Collide))
{
clickMoveOrigin = hitInfo.point;
cameraOrigin = base.transform.position;
}
if (Input.GetMouseButton(1))
{
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out var hitInfo2, 2000f, zeroMask, QueryTriggerInteraction.Collide))
{
Vector3 vector = cameraOrigin - 2f * (hitInfo2.point - clickMoveOrigin);
base.transform.position = (base.transform.position + vector) / 2f;
}
return;
}
if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
{
velocity *= 1f - Time.deltaTime;
velocity += new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * Time.deltaTime * 2f;
float num = Mathf.Clamp(Camera.main.orthographicSize / 10f, 1f, 5f);
base.transform.Translate(velocity * Time.deltaTime * cameraSpeed * num);
return;
}
velocity = Vector3.zero;
Vector3 vector2 = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
if (vector2.sqrMagnitude > 0.1f)
{
float num2 = Mathf.Clamp(Camera.main.orthographicSize / 10f, 1f, 5f);
base.transform.Translate(vector2.normalized * Time.deltaTime * cameraSpeed * num2);
}
}
private void UpdateZoom()
{
float num = Mathf.Clamp(Camera.main.orthographicSize - Input.mouseScrollDelta.y, 1f, 50f);
Camera.main.orthographicSize = num;
cameraHolder.transform.localPosition = new Vector3(0f, 5f + 2f * num, -2f * num - 5f);
if (audioListenerObject != null)
{
audioListenerObject.position = new Vector3(audioListenerObject.position.x, (num + 10f) / 2f, audioListenerObject.position.z);
}
}
}
|