73 lines
1.9 KiB
C#
73 lines
1.9 KiB
C#
using UnityEngine;
|
|
|
|
public class CAMERACON : MonoBehaviour
|
|
{
|
|
[Header("이동 설정")]
|
|
[Tooltip("이동 속도 (단위: 유닛/초)")]
|
|
public float moveSpeed = 5f;
|
|
|
|
[Header("회전 설정")]
|
|
[Tooltip("마우스 회전 속도 (단위: 도/픽셀)")]
|
|
public float rotationSpeed = 2f;
|
|
[Tooltip("Pitch(상하회전) 최대/최소 각도 제한")]
|
|
public Vector2 pitchLimits = new Vector2(-80f, 80f);
|
|
|
|
// 내부 상태
|
|
private float yaw; // Y축 회전 (좌우)
|
|
private float pitch; // X축 회전 (상하)
|
|
|
|
void Start()
|
|
{
|
|
// 초기 회전값 저장
|
|
Vector3 angles = transform.eulerAngles;
|
|
yaw = angles.y;
|
|
pitch = angles.x;
|
|
|
|
// 마우스 포커스 잠금 (선택)
|
|
Cursor.lockState = CursorLockMode.None;
|
|
Cursor.visible = true;
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
HandleMovement();
|
|
HandleRotation();
|
|
}
|
|
|
|
/// <summary>
|
|
/// WASD 키 입력으로 카메라 이동 처리
|
|
/// </summary>
|
|
void HandleMovement()
|
|
{
|
|
// Unity 기본 축("Horizontal"="A/D", "Vertical"="W/S")
|
|
float h = Input.GetAxis("Horizontal");
|
|
float v = Input.GetAxis("Vertical");
|
|
|
|
// 로컬 기준으로 이동 벡터 생성
|
|
Vector3 move = transform.right * h + transform.forward * v;
|
|
transform.position += move * moveSpeed * Time.deltaTime;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 우클릭 + 마우스 드래그로 카메라 회전 처리
|
|
/// </summary>
|
|
void HandleRotation()
|
|
{
|
|
if (Input.GetMouseButton(1))
|
|
{
|
|
// 마우스 움직임 감지
|
|
float deltaX = Input.GetAxis("Mouse X");
|
|
float deltaY = Input.GetAxis("Mouse Y");
|
|
|
|
// 회전값 갱신
|
|
yaw += deltaX * rotationSpeed;
|
|
pitch -= deltaY * rotationSpeed; // 아래로 드래그 시 음수 값
|
|
|
|
// 피치(상하) 각도 제한
|
|
pitch = Mathf.Clamp(pitch, pitchLimits.x, pitchLimits.y);
|
|
|
|
// 적용
|
|
transform.rotation = Quaternion.Euler(pitch, yaw, 0f);
|
|
}
|
|
}
|
|
} |