3D 게임 마우스로 화면 움직이기
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에 회전값을 적용하여 플레이어가 마우스가 가리키는 방향을 바라보도록 설정한다.



