Projext/Assets/Scripts/Camera/PlayerAim.cs

35 lines
2.5 KiB
C#
Raw Normal View History

2026-02-12 15:23:25 +00:00
using UnityEngine; // 유니티 엔진의 기본 기능을 불러올거에요 -> UnityEngine을
2026-01-29 06:58:38 +00:00
2026-02-12 15:23:25 +00:00
public class PlayerAim : MonoBehaviour // 클래스를 선언할거에요 -> MonoBehaviour를 상속받는 PlayerAim을
2026-01-29 06:58:38 +00:00
{
2026-02-12 15:23:25 +00:00
[SerializeField] private PlayerHealth health; // 변수를 선언할거에요 -> 플레이어 체력 스크립트를
2026-01-29 06:58:38 +00:00
2026-02-12 15:23:25 +00:00
[Header("회전 설정")] // 인스펙터 창에 제목을 표시할거에요 -> 회전 설정 을
[SerializeField] private float rotationSpeed = 15f; // 변수를 선언할거에요 -> 회전 속도(감도)를
[SerializeField] private float rotationDeadzone = 1.2f; // 변수를 선언할거에요 -> 회전 무시 범위(데드존)를
2026-01-29 06:58:38 +00:00
2026-02-12 15:23:25 +00:00
public void RotateTowardsMouse() // 함수를 선언할거에요 -> 마우스 방향으로 회전하는 RotateTowardsMouse를
2026-01-29 06:58:38 +00:00
{
2026-02-12 15:23:25 +00:00
if (health != null && health.IsDead) return; // 조건이 맞으면 중단할거에요 -> 플레이어가 죽었다면
2026-01-29 06:58:38 +00:00
// 1. 캐릭터의 월드 위치를 화면 상의 2D 좌표로 변환합니다.
2026-02-12 15:23:25 +00:00
Vector3 playerScreenPos = Camera.main.WorldToScreenPoint(transform.position); // 변환할거에요 -> 캐릭터 월드 좌표를 화면 좌표로
2026-01-29 06:58:38 +00:00
// 2. 마우스의 화면 좌표를 가져옵니다.
2026-02-12 15:23:25 +00:00
Vector3 mousePos = Input.mousePosition; // 가져올거에요 -> 현재 마우스 위치를
2026-01-29 06:58:38 +00:00
// 3. 화면상에서 플레이어 -> 마우스로 향하는 2D 방향 벡터를 구합니다.
2026-02-12 15:23:25 +00:00
Vector3 dir = mousePos - playerScreenPos; // 계산할거에요 -> 마우스와 플레이어 사이의 방향 벡터를
2026-01-29 06:58:38 +00:00
// 4. 거리가 너무 가까우면 회전을 무시합니다 (데드존 적용).
2026-02-12 15:23:25 +00:00
if (dir.magnitude < rotationDeadzone * 50f) return; // 조건이 맞으면 중단할거에요 -> 마우스가 캐릭터에 너무 가깝다면
2026-01-29 06:58:38 +00:00
// 5. 2D 방향 벡터를 각도(Atan2)로 변환합니다.
// 화면의 X는 월드의 X, 화면의 Y는 월드의 Z에 대응합니다 (쿼터뷰/탑다운 기준).
2026-02-12 15:23:25 +00:00
float angle = Mathf.Atan2(dir.x, dir.y) * Mathf.Rad2Deg; // 계산할거에요 -> 벡터를 각도로 변환해서
2026-01-29 06:58:38 +00:00
// 6. 계산된 각도로 캐릭터를 부드럽게 회전시킵니다.
2026-02-12 15:23:25 +00:00
Quaternion targetRotation = Quaternion.Euler(0, angle, 0); // 생성할거에요 -> 목표 회전값(쿼터니언)을
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime); // 회전시킬거에요 -> 현재 회전에서 목표 회전으로 부드럽게
2026-01-29 06:58:38 +00:00
}
}