-
Notifications
You must be signed in to change notification settings - Fork 0
/
CameraBehaviour_v1.cs
145 lines (122 loc) · 4.26 KB
/
CameraBehaviour_v1.cs
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
using System.IO;
using UnityEngine;
public class CameraController : MonoBehaviour
{
[SerializeField]
float _zoomSpeed = 3f;
[SerializeField]
float _zoomMax = 2f;
[SerializeField]
float _zoomMin = 10f;
[SerializeField]
float _RotateSpeed = -0.01f;
[SerializeField]
float _dragSpeed = 0.1f;
[SerializeField]
float _inputSpeed = 20;
private void LateUpdate()
{
CameraZoom();
CameraDrag();
CameraRotate();
CameraRotateWithKey();
CameraInput();
TakeScreenshot();
}
void CameraRotate()
{
if (Input.GetMouseButton(1))
{
float x = Input.GetAxis("Mouse X");
float y = Input.GetAxis("Mouse Y");
Vector3 rotateValue = new Vector3(y, x * -1, 0);
transform.eulerAngles = transform.eulerAngles - rotateValue;
transform.eulerAngles += rotateValue * _RotateSpeed;
}
}
void CameraRotateWithKey()
{
Vector3 rotateValue = new Vector3();
if (Input.GetKey(KeyCode.UpArrow))
rotateValue += new Vector3(-0.2f, 0, 0);
if (Input.GetKey(KeyCode.DownArrow))
rotateValue += new Vector3(0.2f, 0, 0);
if (Input.GetKey(KeyCode.LeftArrow))
rotateValue += new Vector3(0, -0.2f, 0);
if (Input.GetKey(KeyCode.RightArrow))
rotateValue += new Vector3(0, 0.2f, 0);
Vector3 p = rotateValue;
if (p.sqrMagnitude > 0)
{
totalRun += Time.deltaTime;
p = p * totalRun * 0.01f;
p.x = Mathf.Clamp(p.x, -_inputSpeed, _inputSpeed);
p.y = Mathf.Clamp(p.y, -_inputSpeed, _inputSpeed);
p.z = Mathf.Clamp(p.z, -_inputSpeed, _inputSpeed);
transform.Rotate(p);
}
}
void CameraZoom()
{
float _zoomDirection = Input.GetAxis("Mouse ScrollWheel");
if (transform.position.y <= _zoomMax && _zoomDirection > 0)
return;
if (transform.position.y >= _zoomMin && _zoomDirection < 0)
return;
transform.position += transform.forward * _zoomDirection * _zoomSpeed;
}
void CameraDrag()
{
if (Input.GetMouseButton(0))
{
float posX = Input.GetAxis("Mouse X");
float posZ = Input.GetAxis("Mouse Y");
Quaternion v3Rotation = Quaternion.Euler(0f, transform.eulerAngles.y, 0f);
transform.position += v3Rotation * new Vector3(posX * -_dragSpeed, 0, posZ * -_dragSpeed); // 플레이어의 위치에서 카메라가 바라보는 방향에 벡터값을 적용한 상대 좌표를 차감합니다.
}
}
float totalRun = 1.0f;
private void CameraInput()
{
Vector3 p_Velocity = new Vector3();
if (Input.GetKey(KeyCode.W))
p_Velocity += new Vector3(0, 0.05f, 0);
if (Input.GetKey(KeyCode.S))
p_Velocity += new Vector3(0, -0.05f, 0);
if (Input.GetKey(KeyCode.Alpha1))
p_Velocity += new Vector3(0, 0, 0.05f);
if (Input.GetKey(KeyCode.Alpha2))
p_Velocity += new Vector3(0, 0, -0.05f);
if (Input.GetKey(KeyCode.A))
p_Velocity += new Vector3(-0.05f, 0, 0);
if (Input.GetKey(KeyCode.D))
p_Velocity += new Vector3(0.05f, 0, 0);
Vector3 p = p_Velocity;
if (p.sqrMagnitude > 0)
{
totalRun += Time.deltaTime;
p = p * totalRun * 0.01f;
p.x = Mathf.Clamp(p.x, -_inputSpeed, _inputSpeed);
p.y = Mathf.Clamp(p.y, -_inputSpeed, _inputSpeed);
p.z = Mathf.Clamp(p.z, -_inputSpeed, _inputSpeed);
transform.Translate(p);
}
}
private void TakeScreenshot()
{
string directory = "Assets/screenshot2/";
string baseFileName = "screenshot";
string extension = ".png";
int fileIndex = 1;
string filePath = Path.Combine(directory, baseFileName + fileIndex + extension);
while (File.Exists(filePath))
{
fileIndex++;
filePath = Path.Combine(directory, baseFileName + fileIndex + extension);
}
// 스크린샷을 파일로 저장
if (Input.GetKeyDown(KeyCode.F1))
ScreenCapture.CaptureScreenshot(filePath);
// Debug.Log($"Screenshot saved to: {filePath}");
}
}