3D 게임 마우스로 화면 움직이기

공재원
∙∙조회 6
csharp
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private Camera mainCamera;
private void RotateToMouse()
{
    Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);

    Plane groundPlane = new Plane(Vector3.up, transform.position);

    if (groundPlane.Raycast(ray, out float distance))
    {
        Vector3 targetPoint = ray.GetPoint(distance);

        Vector3 direction = targetPoint - transform.position;
        direction.y = 0f;

        if (direction != Vector3.zero)
        {
            direction.Normalize();
            transform.rotation = Quaternion.LookRotation(direction);
        }
    }
}
}

1. 마우스 위치를 향하는 광선 생성

  • Input.mousePosition으로 화면에서 마우스의 위치를 가져온다.
  • mainCamera.ScreenPointToRay()로 카메라에서 마우스 위치를 향하는 광선을 생성한다.
  • 생성한 광선을 ray 변수에 저장한다.

2. 바닥 평면 생성

  • Plane으로 가상의 평면을 생성한다.
  • Vector3.up으로 평면의 위쪽 방향을 설정한다.
  • transform.position으로 평면이 지나는 위치를 플레이어의 위치로 설정한다.

3. 광선과 평면의 교차 확인

  • groundPlane.Raycast()로 광선과 평면이 만나는지 확인한다.
  • out float distance로 광선의 시작점부터 교차 지점까지의 거리를 저장한다.
  • 교차 지점을 찾았을 때만 내부 코드를 실행한다.

4. 목표 지점 계산

  • ray.GetPoint(distance)로 광선 위의 교차 지점 좌표를 가져온다.
  • 가져온 좌표를 targetPoint 변수에 저장한다.

5. 플레이어가 바라볼 방향 계산

  • targetPoint - transform.position으로 플레이어 위치에서 목표 지점까지의 방향을 계산한다.
  • direction.y = 0f로 위아래 방향을 제거하여 수평 방향으로만 회전하도록 설정한다.

6. 방향 확인 및 정규화

  • direction != Vector3.zero로 방향이 0인지 확인한다.
  • direction.Normalize()로 방향의 길이를 1로 정규화한다.
  • 방향은 유지하고 벡터의 길이만 조정한다.

7. 플레이어 회전 적용

  • Quaternion.LookRotation(direction)으로 지정한 방향을 바라보는 회전값을 생성한다.
  • transform.rotation에 회전값을 적용하여 플레이어가 마우스가 가리키는 방향을 바라보도록 설정한다.