공부/C#

레이캐스트(Raycast)로 평면과 충돌했는지 어떻게 판단할가?

셩잇님 2023. 3. 17. 15:35
반응형

 

 

Unity 게임 엔진에서 레이캐스트가 평면과 충돌했는지 확인하려면 다음 단계를 사용하면 됩니다:

  1. 충돌을 확인하려는 오브젝트의 위치에서 시작하여 한 방향으로 확장되는 레이 오브젝트를 생성합니다.
  2. Physics.Raycast() 메서드를 사용하여 충돌을 확인하려는 방향으로 레이를 형변환합니다. 이 메서드는 콜리전 발생 여부를 나타내는 부울 값을 반환합니다.
  3. 콜리전이 발생한 경우 Physics.Raycast() 메서드가 반환하는 RaycastHit 오브젝트의 hit.collider 프로퍼티를 확인하여 평면 콜리더인지 확인합니다. 콜리더 프로퍼티는 레이에 부딪힌 콜리더 오브젝트를 반환합니다.

 

다음은 C# 에서 충돌 여부를 확인하는 방법에 코드입니다.

public bool HasCollidedWithPlane(Vector3 position, Vector3 direction, out RaycastHit hit)
{
    // 주어진 위치에서 시작하여 주어진 방향으로 확장되는 Ray 객체를 생성합니다.
    Ray ray = new Ray(position, direction);

    // Ray를 형변환하고 RaycastHit 객체를 가져옵니다.
    bool hasHit = Physics.Raycast(ray, out hit);

    // 레이캐스트히트 오브젝트가 평면 충돌자인지 확인합니다.
    if (hasHit && hit.collider is PlaneCollider)
    {
        // 레이가 평면과 충돌했습니다.
        return true;
    }
    else
    {
        // 레이가 평면과 충돌하지 않았습니다.
        return false;
    }
}


이 예제에서 위치 파라미터는 충돌 여부를 확인하려는 오브젝트의 위치, 방향 파라미터는 충돌 여부를 확인하려는 방향, 히트 파라미터는 충돌이 발생한 경우 RaycastHit 오브젝트로 설정되는 아웃 파라미터입니다. out 키워드는 Physics.Raycast() 메서드에서 설정할 수 있도록 히트 파라미터를 참조로 전달하는 데 사용됩니다.

is 키워드는 hit.collider 오브젝트의 유형이 PlaneCollider인지 확인하는 데 사용됩니다. 이 경우 메서드는 참을 반환하여 평면과의 충돌이 발생했음을 나타냅니다. 그렇지 않으면 false를 반환합니다.

 

 

 

반응형