728x90
특정위치 변환
- SetPositionAndRotation
Camera.main.transform.SetPositionAndRotation
(
new Vector3(-6.6f, 273.3f, 44.1f),
Quaternion.Euler(80.823f, 90.16f, -0.062f)
);
조작이동
기능
- 마우스 휠 카메라 줌인 줌아웃
- 마우스 오른쪽 드레그로 카메라 회전
- 마우스 왼쪽 드레그로 앞뒤좌우 카메라 이동
- 키보드 1, 2, W,A,S,D 카메라 이동
using UnityEngine;
public class CameraController : MonoBehaviour
{
[SerializeField]
float _zoomSpeed = 300f;
[SerializeField]
float _zoomMax = 200f;
[SerializeField]
float _zoomMin = 1000f;
[SerializeField]
float _RotateSpeed = -1f;
[SerializeField]
float _dragSpeed = 10f;
[SerializeField]
float _inputSpeed = 20;
private void LateUpdate()
{
CameraZoom();
CameraDrag();
CameraRotate();
CameraInput();
}
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 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, 1f, 0);
if (Input.GetKey(KeyCode.S))
p_Velocity += new Vector3(0, -1f, 0);
if (Input.GetKey(KeyCode.Alpha1))
p_Velocity += new Vector3(0, 0, 1f);
if (Input.GetKey(KeyCode.Alpha2))
p_Velocity += new Vector3(0, 0, -1f);
if (Input.GetKey(KeyCode.A))
p_Velocity += new Vector3(-1f, 0, 0);
if (Input.GetKey(KeyCode.D))
p_Velocity += new Vector3(1f, 0, 0);
Vector3 p = p_Velocity;
if (p.sqrMagnitude > 0)
{
totalRun += Time.deltaTime;
p = p * totalRun * 1.0f;
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);
}
}
}
728x90
'Unity' 카테고리의 다른 글
[Unity] 클라이언트 기본구조 작성 순서 (0) | 2022.11.29 |
---|---|
[Unity] 빌드 자동화방법 (0) | 2022.11.21 |
[Unity2D] 캐릭터 픽셀단위로 이동하는 방법 (0) | 2022.11.14 |
[Unity2D] 맵 존관리 방법 (0) | 2022.11.14 |
[Unity] 유니티 Editor 만드는 방법 (0) | 2022.11.14 |