Files
Simulation/Assets/CAMERACON.cs
2025-06-26 11:48:44 +09:00

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);
}
}
}