오브젝트 유무 검증을 위한 물리적 상호작용
😃Unity 에서 말하는 이 Casting은 C#에서 타입변환에 대한 캐스팅이 아니라, 위와 같이 어떠한 물체가 존재하는지 확인하기 위한 Physics Casting을 의미한다.
if (Physics.Raycast(transform.position, transform.forward, 10))
print("앞에 물체가 있다!!");
//------------------------------------------
if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 10))
{
Debug.Log($"충돌한 물체는 { hit.transform.name } 입니다.");
}
Physics의 레이케스트 함수는 보통 위의 두 가지 오버로드된 방식으로 쓰인다.
첫번째 방식은 발사점(첫번째 인자)에서 전방(두번째인자)으로 해당 캐스팅의 최대거리(10)까지 Ray(직선광선)을 발상하여 그 사이에서 출돌되는 물체가 있다면 true를 없다면 false를 반환해준다.
두번째 방식또한 실질적으로 bool값을 반환하지만, RaycastHit타입의 hit변수에 충돌한 오브젝트의 정보를 넣어 주는 내부로직이 있어, 3번째 인자를 사용하여 충돌된 철번째 물체에 대한 정보를 확인할 수 있다.
😃캐스팅 함수의 종류는 Piysics와 Piysics2D와 조금 달라질 수 있다. 3D와 2D가 다르 듯이 3D에서 SphereCast(구형체 영역 캐스팅)는 2D에서 존재하지 않고 CircleCast(원형태 영형 캐스팅)로 정의되어 있기 때문에 필요에 따라서 찾아 사용해보자.
캐스팅함수는 정지영역의 검사가 아니라 쭉 방향을보고 검사를 진행한다.
RaycastHit[] hit = Physics.BoxcastAll(transform.position, 2.0f, transform.forward, transform.rotation, 10.0f)
위와 같이 코드를 작성한다면, 10.0f거리에서 한변이4.0f로 이루어진 큐브형태의 영역을 검사하는 것이 아니라, 시작점(transform.position)에서 전방(transform.forward)으로 한변이4.0f로 이루어진 큐브형태의 검출체를 10.0f거리까지 발싸하여 그 시작부터 도착점까지의 모든 영역을 검사한다.
실질적인 검사 영역은 4.0f변을 가진 정육면체의 영역만이 아니라 4.0f, 4.0f, 14.0f만큼의 변길이를 가진 직육면체 형태의 검사 영역을 가지게 된다.
😃캐스팅과 같은 충돌 오브젝트 검증을 위한 함수들이 Piysics에는 더 존재한다.
Cast함수들은 RayCastHit 타입의 오브젝트를 반환한 것과 달리, Collider[] 오브젝트를 반환한다.