[Unity] Raycast, 최적화 방법

baebaeran·2024년 12월 7일
0

Unity_메모장

목록 보기
7/14

레이케스트란 무엇인가?

먼저 레이캐스트란 무엇일까요? 레이캐스트는 게임 개발에서 오브젝트들의 충돌과 상호작용을 감지하기 위한 수단입니다. 레이캐스트는 특정 방향으로 뻗어나가는 라인으로, 다른 오브젝트와의 충돌을 감지하거나 물체들 간의 거리를 계산하며, 라인의 경로 상에 있는 오브젝트를 감지하는 등 다양한 용도로 사용됩니다. 레이캐스트는 2D와 3D 게임 모두에서 사용되며, 게임 개발에서 핵심적인 개념입니다.

Unity에서는 Physics.Raycast() 메서드를 사용하여 레이캐스트를 만들 수 있습니다. 이 메서드는 시작 위치와 방향을 받아 해당 방향으로 뻗어나가는 라인과 충돌한 오브젝트에 대한 정보를 반환합니다. 또한, Debug.DrawLine() 메서드를 사용하여 레이캐스트의 경로를 시각화할 수 있습니다. 다음은 코드 예입니다.

// 플레이어의 위치에서 정면 방향으로 레이캐스트를 생성합니다.
// 생성한 레이캐스트가 충돌한 오브젝트에 대한 정보를 hit 변수에 저장합니다.
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.forward, out hit))
{
    // 충돌한 오브젝트의 이름을 디버그 로그에 출력합니다.
    Debug.Log("충돌한 오브젝트: " + hit.collider.name);
    
    // 레이캐스트의 시작점부터 충돌 지점까지 빨간색으로 선을 그려 시각화합니다.
    Debug.DrawLine(transform.position, hit.point, Color.red);
}

레이캐스트 성능 최적화 방법

레이캐스트의 성능을 최적화하는 방법으로는 레이캐스트의 수를 제한하고, 레이어 마스크를 사용하여 원하지 않는 충돌을 필터링하며, Physics.RaycastAll() 메서드를 사용하여 한 번에 여러 충돌을 감지하는 등의 방법이 있습니다.

// 레이어 마스크를 사용하여 원하는 충돌 대상만 필터링합니다.
int layerMask = LayerMask.GetMask("Enemy", "Obstacle");
if (Physics.Raycast(transform.position, transform.forward, out hit, Mathf.Infinity, layerMask))
{
    // 충돌한 오브젝트의 이름을 디버그 로그에 출력합니다.
    Debug.Log("충돌한 오브젝트: " + hit.collider.name);
    
    // 레이캐스트의 시작점부터 충돌 지점까지 빨간색으로 선을 그려 시각화합니다.
    Debug.DrawLine(transform.position, hit.point, Color.red);
}

// 한 번에 여러 충돌을 감지하기 위해 Physics.RaycastAll() 메서드를 사용합니다.
RaycastHit[] hits = Physics.RaycastAll(transform.position, transform.forward, Mathf.Infinity, layerMask);
foreach (RaycastHit hit in hits)
{
    // 각 충돌한 오브젝트의 이름을 디버그 로그에 출력합니다.
    Debug.Log("충돌한 오브젝트: " + hit.collider.name);
    
    // 레이캐스트의 시작점부터 충돌 지점까지 파란색으로 선을 그려 시각화합니다.
    Debug.DrawLine(transform.position, hit.point, Color.blue);
}
profile
보고-배우는-것-들을-기록합니다

0개의 댓글