이 오브젝트를 통해 PhysicsWorld에서 물리적 오브젝트를 대상으로 충돌 테스트를 수행할 수 있습니다.
Raycast 오브젝트는 완전한 사용자 데이터 오브젝트입니다. 즉,
광선 투사는 결과를 어떻게 검색할지에 따라 세 가지 방법으로 수행할 수 있습니다.
단일 광선 투사만 수행하면 되고, 결과를 즉시 원한다면 이 옵션을 사용합니다.
이 시나리오에서는 stingray.PhysicsWorld.raycast() 함수를 호출합니다. 광선의 시작점, 방향 및 최대 길이를 지정하고, 충돌 테스트를 제어할 매개변수(아래 Raycast 매개변수 참조) 역시 지정해야 합니다.
예를 들면 다음과 같습니다.
local foundCollision, collisionPos, distance, normal, actor = stingray.PhysicsWorld.raycast(my_world, start, dir, "closest")
이 예에서는 광선 투사를 "closest" 매개변수를 통해 호출하는데, 이 경우 함수가 첫 번째 충돌 지점(있는 경우)에 관한 세부 정보를 반환합니다.
동일한 매개변수(아래 Raycast 매개변수 참조)를 사용하여 다중 광선 투사를 수행하고, 결과를 즉시 처리해야 하는 경우 이 옵션을 사용합니다. 이 옵션은 동일한 Raycast 오브젝트를 재사용하는 것이기 때문에 보통 stingray.PhysicsWorld.raycast()를 연속해서 여러 번 호출하는 것보다 효과적입니다.
이 시나리오에서는 stingray.PhysicsWorld.make_raycast()를 호출(콜백 매개변수는 전체적으로 생략)하여 새로운 Raycast 오브젝트를 생성합니다. 그런 다음, 새 오브젝트에 대해 stingray.Raycast.cast() 함수를 호출합니다. 예를 들면 다음과 같습니다.
local raycastObj = stingray.PhysicsWorld.make_raycast(my_world, "all") local collisionResultsA = raycastObj:cast(start, dirA, length) local collisionResultsB = raycastObj:cast(start, dirB, length) ...
이 예에서는 Raycast가 "all" 매개변수를 통해 초기화되기 때문에 collisionResultsA 및 collisionResultsB 변수가 각각 collision_hit 데이터 테이블의 어레이로 설정됩니다.
다중 광선 투사를 수행하고, 결과는 이후 프레임에서 처리하도록 연기할 수 있는 경우 이 옵션을 사용합니다.
이 시나리오에서는
예를 들면 다음과 같습니다.
local raycastObj = stingray.PhysicsWorld.make_raycast(my_world, my_raycast_callback, "all", "types", "statics") raycastObj:cast(start, dirA, length) raycastObj:cast(start, dirB, length) ...
이 예에서는 Raycast가 "all" 매개변수를 통해 초기화되기 때문에 my_raycast_callback 함수가 collision_hit 데이터 테이블의 어레이로 전달됩니다.
stingray.PhysicsWorld.make_raycast()를 사용하여 새로운 Raycast 오브젝트를 생성하거나, stingray.PhysicsWorld.raycast()를 호출하여 단일 동기 광선 투사를 수행할 때에는 충돌 테스트의 동작과 생성되는 결과의 유형을 제어하는 일부 매개변수를 지정할 수 있습니다.
허용되는 매개변수 값은 다음과 같습니다.
"any": 광선이 무언가에 충돌하는지만 알고 싶다면 이 값을 사용합니다. 이 옵션을 사용하면 광선 투사 결과 충돌이 감지되었는지 여부를 나타내는 단일 부울 값만 생성됩니다.
"all": 광선 경로상에서 발생한 모든 충돌에 대한 세부 정보를 원한다면 이 값을 사용합니다. 이 옵션을 사용하면 광선 투사 결과 collision_hit 테이블의 어레이(각 테이블이 광선을 따라 존재하는 충돌 지점 하나씩을 기록)를 포함하는 하나의 테이블이 생성됩니다.
"closest": 광선에 의해 발생하는 첫 번째 충돌에 관한 정보만 필요하다면 이 값을 사용합니다. 이것은 기본 모드입니다. 이 옵션을 사용하면 광선 투사 결과 여러 값이 생성됩니다.
"types": 충돌을 위해 고려해야 할 오브젝트의 유형을 결정합니다. 이 매개변수를 지정하는 경우, 해당 유형을 지정하는 추가 문자열 매개변수를 뒤에 붙여야 합니다. "statics": 정적 오브젝트에 대해서만 광선을 테스트하도록 지정합니다. "dynamics": 동적 오브젝트에 대해서만 광선을 테스트해야 함을 지정합니다. "both": 정적 오브젝트와 동적 오브젝트 모두에 대해서 광선을 테스트해야 함을 지정합니다. 기본값입니다.
"collision_filter": 이 매개변수를 통해 광선이 충돌할 오브젝트를 결정하는 데 사용해야 하는 충돌 필터를 지정할 수 있습니다. 이 매개변수를 지정하는 경우, global.physics_properties 데이터 파일에 정의된 대로, 충돌 필터의 이름을 지정하는 추가 문자열 매개변수를 뒤에 붙여야 합니다. 기본적으로 광선은 장면 내 모든 오브젝트와 충돌합니다.
"mesh_both_sides" 광선 투사가 물리적 메시의 뒷면 삼각형에도 충돌하기를 원하는 경우 이 매개변수를 추가합니다.