このオブジェクトでは、PhysicsWorld 内の物理オブジェクトに対して衝突テストを実行できます。
レイキャスト オブジェクトは、完全なユーザデータ オブジェクトです。したがって、
レイキャストの実行方法は 3 つあり、どの方法を取るかによって得られる結果が異なります。
レイキャストを 1 つだけ実行して結果をただちに処理する必要がある場合は、このオプションを使用します。
このシナリオでは、stingray.PhysicsWorld.raycast() 関数を呼び出します。開始ポイント、方向、レイの最大長、および衝突テストを制御するパラメータ(下記の「レイキャスト パラメータ」を参照)を指定する必要があります。
たとえば、次のようになります。
local foundCollision, collisionPos, distance, normal, actor = stingray.PhysicsWorld.raycast(my_world, start, dir, "closest")
この例では "closest" パラメータを指定してレイキャストを呼び出しているため、最初の衝突ポイントに関する詳細情報が返されます(衝突ポイントが存在する場合)。
同じパラメータ(下記の「レイキャスト パラメータ」を参照)を指定して複数のレイキャストを実行し、結果をただちに処理する必要がある場合は、このオプションを使用します。このオプションでは同じ 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) ...
この例では "all" パラメータを指定して Raycast を初期化しているため、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) ...
この例では、"all" パラメータを使用して Raycast を初期化しているため、my_raycast_callback 関数には collision_hit データ テーブルの配列が渡されます。
stingray.PhysicsWorld.make_raycast() を使用して新しい Raycast オブジェクトを作成する場合や、stingray.PhysicsWorld.raycast() を呼び出して単一のレイキャストを同期実行する場合は、衝突テストの動作と結果の種類を制御するパラメータを指定できます。
有効なパラメータ値は以下のとおりです。
"any": レイが何かに衝突したかどうかだけを調べるには、この値を使用します。このオプションを使用すると、衝突が検出されたかどうかを示すブール値が 1 つだけ生成されます。
"all": レイの進路上で発生したすべての衝突の詳細を調べるには、この値を使用します。このオプションを使用すると、collision_hit テーブルの配列からなるテーブルが生成され、レイの衝突ポイントが 1 つの collision_hit テーブルにつき 1 つずつ記録されます。
"closest": レイの最初の衝突だけを調べるには、この値を使用します。これは既定のモードです。このオプションを使用すると、以下の値が生成されます。
"types": 衝突の際に考慮する必要があるオブジェクトのタイプを決定します。このパラメータを指定する場合は、タイプを指定する文字列パラメータも続けて指定する必要があります。"statics" は静的オブジェクトに対してのみレイ テストを行う場合に指定します。"dynamics" は動的オブジェクトに対してのみレイ テストを行う場合に指定します。"both" は静的オブジェクトと動的オブジェクトの両方に対してレイ テストを行う場合に指定します。これが既定値です。
"collision_filter": このパラメータでは、レイの衝突テストの際に考慮する必要があるオブジェクトを決定する衝突フィルタを指定できます。このパラメータを指定する場合は、global.physics_properties データ ファイルで定義されている衝突フィルタ名を指定する文字列パラメータも続けて指定する必要があります。既定では、シーン内のすべてのオブジェクトがレイの衝突テストの対象になります。
"mesh_both_sides" 物理メッシュ内の三角形の方向にもレイキャストをヒットさせる場合は、このパラメータを追加します。