WorldRoot
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
このベースクラスは、Workspace や WorldModel など、3D空間のクエリとシミュレーションを処理する目的のインスタンスに対する APIを提供します。
概要
プロパティ
Model から継承した プロパティインスタンスストリーミングを有効にしたエクスペリエンスのモデルの詳細レベルを設定します。
インスタンスストリーミングが有効になっているときに、モデルストリーミングの動作を制御します Models 。
The primary part of the Model 、または nil が明示的に設定されていない場合
モデルの周りにスケールを拡大するために使用される編集者専用のプロパティ。このプロパティを設定すると、スケールが Model/ScaleTo を呼び出したように移動します。
どこに Model が しない を持つピボットが位置するかを決定します。Determines where the pivot of a > which does not have a set Model.PrimaryPart is located.
方法
指定された BasePart のいずれかが他の部分に触れている場合、真を返します。
指定された方向にブロック形状をキャストし、形状が または または セルにヒットする場合、 を返します。
返すパーツのアレイの バインディングボックス が指定のボックスに重複するパーツ。
返すパーツのアレイの バインディングボックス が指定された球に重複するもの。
占有スペースが指定されたパーツと共有されるパーツのアレイを返します。
- IKMoveTo(part : BasePart,target : CFrame,translateStiffness : number,rotateStiffness : number,collisionsMode : Enum.IKCollisionsMode):()
部品を直接そこに移動せず、逆のキネマティクスを介して指定された場所に移動して、その部品が参加しているジョイント、制限、または衝突が物理的に満足していることを確認するために、指定された部分を移動します。
起源、方向、およびオプションの RaycastParams を使用してレイを投射し、有効なオブジェクトまたは地形がレイと交差する場合は、RaycastResult を返します。
- Spherecast(position : Vector3,radius : number,direction : Vector3,params : RaycastParams):RaycastResult?
指定された方向に球形の形状を投げ、形状が または または セルにヒットする場合は、 を返します。
指定された時間増加とオプションの BaseParts セットに基づいて、世界のパーツのシミュレーションを前進させます。
このモデルを指定されたプレイヤーに永続させるように設定します。ModelStreamingMode は、追加の結果として動作が変更されるため、PersistentPerPlayer に設定する必要があります。
モデルのすべての部分を含むボリュームの説明を返します。
返すのは、BaseParts すべてを含む最小のバインディングボックスのサイズ、そして Model に沿って設定されている場合、Model.PrimaryPart と一致します。
このモデルオブジェクトが持続するすべての Player オブジェクトを返します。動作は、このメソッドが Script または LocalScript から呼ばれるかどうかによって異なります。
モデルの正規スケールを返し、新しく作成されたモデルにはデフォルトで 1 が割り当てられ、Model/ScaleTo を介してスケールすると変更されます。
PrimaryPart を指定された位置に移動します。プライマリパーツが指定されていない場合、モデルのルートパーツが使用されます。
指定されたプレイヤーのために、このモデルを永続しないようにします。ModelStreamingMode は、削除の結果として動作が変更されるために PersistentPerPlayer に設定する必要があります。
モデルのスケール因子を設定し、すべての子インスタンスのサイズと場所を調整して、スケール因子が 1 のときと比較して、そのスケール因子が初期のサイズと場所に関連しているようにします。
指定された オフセットによってシフトし、モデルの向きを保持します。新しい位置に別の BasePart または Terrain がすでに存在する場合、Model はそのオブジェクトをオーバーライドします。
PVInstance のピボットを取得します。
変換する PVInstance とすべての子孫 PVInstances を通じて、ピボットが現在指定された CFrame に位置します。
プロパティ
方法
ArePartsTouchingOthers
ArePartsTouchingOthers は、指定された BasePart の少なくとも 1 つが他のパーツに触れている場合、真を返します。距離制限内にある場合、2つのパーツは「タッチ」と考えられます、overlapIgnored。
パーツが提供されない場合、false が返されます。
パラメータ
リストにあるパーツがリストにないパーツに触れているかどうかをチェックするパーツチェックのリスト。
パーツが接触すると考えられる前に無視されるスタッドのパーツオーバー境界。
戻り値
パーツリストにないパーツのいずれかがタッチしている場合のみ が true、パーツがパスされない場合は false。
コードサンプル
以下のコードブロックでは、WorldRoot:ArePartsTouchingOthers() を使用して、リストのパーツがリストにないワークスペースのパーツに触れているかどうかをチェックする方法を示します。
まずスクリプトは、1スタッドオーバーする 2つの正方形のパーツを作成します、Part1 と Part2 。次に、パーツ1が partList にパスされると、ArePartsTouchingOthers() によって返された値を三つの重複値で印刷します:0、0.999、および 1。最初の 2 回、ArePartsTouchingOthers() が呼び出されると、オーバーラップ値が Part1 と Part2 がオーバーラップする距離よりも小さいため、返却 false が行われます。3番目の呼び出しは、true オーバーラップ値がパーツが重複する距離と同等であるため、返します。
local part1 = Instance.new("Part")
part1.Name = "Part1"
part1.Anchored = true
part1.Transparency = 0.5
part1.Color = Color3.fromRGB(185, 100, 38)
part1.Size = Vector3.new(2, 2, 2)
part1.Position = Vector3.new(0, 4, 0)
part1.Parent = workspace
local part2 = Instance.new("Part")
part2.Name = "Part2"
part2.Anchored = true
part2.Transparency = 0.5
part2.Color = Color3.fromRGB(200, 10, 0)
part2.Size = Vector3.new(2, 2, 2)
part2.Position = Vector3.new(0, 5, 0)
part2.Parent = workspace
local partList = { part1 }
print(workspace:ArePartsTouchingOthers(partList, 0)) -- 真
print(workspace:ArePartsTouchingOthers(partList, 0.999)) -- 真
print(workspace:ArePartsTouchingOthers(partList, 1)) -- False
Blockcast
指定された方向にブロック形状をキャストし、BasePart または Terrain セルで最初の衝突を返します。これは、WorldRoot:Raycast() が線形レイを方向に投射して衝突を検出する方法と同様ですが、レイではなく 3D 形状を使用します。
とは異なり、このメソッドは最初に形を交差させる を検出しません。
ヒットが検出された場合、RaycastResult にヒット情報が含まれるヒットが返されます。Distance プロパティは、形状がヒットを見つけるために移動する距離を表し、Position プロパティは、ヒットを引き起こす交差点を表します。
このメソッドは、無効な CFrame 、サイズ、または方向の入力がパスされた場合、エラーをスローします。
パラメータ
キャストブロックの形状の初期位置と回転。
キャストブロックの形状のサイズをスタッドで表します。最大サイズは 512 スタッドです。
形状キャストの方向、そして量が形状が移動できる最大距離を表す。最大距離は 1024 スタッドです。
戻り値
コードサンプル
Casts a block and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castBlock()
-- The initial position and rotation of the cast block shape
local originCFrame = CFrame.new(Vector3.new(0, 50, 0))
-- The size of the cast block shape
local size = Vector3.new(6, 3, 9)
-- The direction the block is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the block and create a visualization of it
local raycastResult = Workspace:Blockcast(originCFrame, size, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Block intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between block's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a block every 2 seconds
while true do
castBlock()
task.wait(2)
end
BulkMoveTo
この関数は、デフォルトのプロパティ BaseParts イベントを発射する必要はなく、CFrames テーブルを Changed テーブルに移動します。これにより、各個のパーツについて別々のプロパティセットのコストを支払う必要がないため、大量のパーツを移動する方法が非常に速くなります。
3番目の引数では、移動操作をさらに最適化できます。デフォルトでは、各パーツの Changed イベントが Position , Orientation , そして CFrame に発射します。しかし、第 3 引数として FireCFrameChanged を指定すると、CFrame プロパティの Changed イベントだけが発動します。
パーツの移動がコードのボトルネックであることを確信している場合にのみ、この機能を使用する必要があることに注意してください。単に個々のパーツの CFrame プロパティと接合モデルを設定するだけで、大多数の場合に十分速いです。
パラメータ
戻り値
GetPartBoundsInBox
WorldRoot:GetPartBoundsInBox() は、 バインディングボックス が指定された中心 ( CFrame ) とサイズ ( Vector3 ) で箱のボリュームを記述する箱に重複するパーツのアレイを返します。
強調されたように、この空間クエリメソッドは、実際の占有ボリュームではなく、パーツのバインディングボックスのボリュームを効率的に考慮します。これは、円筒、球、連合、およびブロック形状のない MeshParts を考慮するときに重要かもしれません。特に精度が重要な場合は、WorldRoot:GetPartsInPart() を代わりに使用するか、このメソッドの結果を自分でさらにフィルタリングします。
このメソッドは、 オブジェクトを使用して、包含または排除リスト、最大部品数、使用する衝突グループ、およびクエリが交差する部分の値を説明することで、空間クエリの再利用可能な部分を説明します。
パラメータ
クエリ対象のボックスボリュームの中心の場所。
クエリーする指定されたボックスボリュームのサイズ。
空間クエリパラメータの再利用可能な部分を含みます。
戻り値
空間クエリに一致する BaseParts の配列。
GetPartBoundsInRadius
WorldRoot:GetPartBoundsInRadius() は、 バインディングボックス が重複するパーツのアレイを返し、指定された中心 ( Vector3 ) と半径 (number) で説明されるスフィアのボリュームを使用します。
強調されたように、この空間クエリメソッドは、実際の占有ボリュームではなく、パーツのバインディングボックスのボリュームを効率的に考慮します。これは、円筒、球、連合、およびブロック形状のない MeshParts を考慮するときに重要かもしれません。特に精度が重要な場合は、WorldRoot:GetPartsInPart() を代わりに使用するか、このメソッドの結果を自分でさらにフィルタリングします。
このメソッドは、 オブジェクトを使用して、包含または排除リスト、最大部品数、使用する衝突グループ、およびクエリが交差する部分の値を説明することで、空間クエリの再利用可能な部分を説明します。
パラメータ
クエリ対象の指定された球体ボリュームの中心の位置。
クエリ対象の指定された球体ボリュームの半径。
空間クエリパラメータの再利用可能な部分を含みます。
戻り値
空間クエリに一致する BaseParts の配列。
GetPartsInPart
WorldRoot:GetPartsInPart() は、占有スペースが指定されたパーツと共有されるパーツのアレイを返します (これは、クエリ対象のパーツと同じ WorldRoot に存在する必要があります)。このメソッドは BasePart:GetTouchingParts() の代わりに使用でき、一般的にはより良い選択です。
注意してください、この空間クエリメソッドは、完全な幾何的衝突検チェックを使用して、指定されたパーツが占有する 正確なボリューム を考慮します。例えば、凹状/空洞の部品は、実際にその部分を重複/タッチしない限り、クエリされた部品と一致しません。よりシンプルなボリュームの場合は、WorldRoot:GetPartBoundsInBox() または WorldRoot:GetPartBoundsInRadius() を使用することを検討してください。これらはより正確ではありませんが、より効率的に実行されます。
このメソッドは、 オブジェクトを使用して、包含または排除リスト、最大部品数、使用する衝突グループ、およびクエリが交差する部分の値を説明することで、空間クエリの再利用可能な部分を説明します。
パラメータ
他のパーツと比較するボリュームのある部分。
空間クエリパラメータの再利用可能な部分を含みます。
戻り値
空間クエリに一致する BaseParts の配列。
IKMoveTo
この機能は、逆キネマティクスを介して、指定されたパーツを指定された場所に移動し、そこに直接移動するのではなく、任意のジョイント、constraints、またはパーツが参加しているコライドが物理的に満足するようにするため、この機能は、指定されたパーツを指定された場所に移動します。現在、この機能は、実行中のゲームの物理との衝突のため、Studio にのみ plugins で利用可能です。
剛性を翻訳 は、パーツの位置をターゲットの CFrame の位置とどれほど攻撃的に一致させるかを指定する 0 から 1 の数字です。 剛性を回転 は、パーツの回転をターゲットの CFrame の回転部分とどれほど攻撃的に一致させるかを指定する 0 から 1の数字です。
例えば:
- 翻訳強度と回転強度が両方とも 1 で同じ場合、パーツは物理的な制約が存在しても、ターゲットの CFrame に正確に移動されます。
- 翻訳強度と回転強度の両方が 0.5 で同じ場合、パーツはターゲットの CFrame に正確に移動しようとしますが、物理的な制約により道を外される可能性があります。
- 翻訳強度と回転強度が両方とも 0 で同じ場合、ターゲットの CFrame は無視され、物理的な制約は対象の位置で解決されます。
パラメータ
移動中のパーツ。
指定されたパーツを移動する場所。
物理解像で影響を受けるオブジェクトを指定できます。
戻り値
Raycast
起源、方向、オプションの RaycastParams を使用してレイを投射します。有効な BasePart または Terrain セルを見つけた場合、操作の結果を含む RaycastResult が返されます。RaycastParams オブジェクトが提供されない場合、デフォルトが使用されます (すべてのパーツが考慮され、Terrain 水は無視されません)。
注意してください、方向ベクトルの長さ (大きさ) は重要であり、長さよりも遠いオブジェクト/地形はテストされません。 を使用してレイコンポーネントを作成するのを助けている場合、下の例に示すように、方向ベクトルとして を使用し、必要な長さを乗算してください。方向ベクトルの最大長は 15,000 スタッドです。
このメソッドは 使用しない オブジェクト Ray を使用しませんが、起源と方向コンポーネントは Ray.Origin と Ray.Direction から借用できます。
パラメータ
レイの起点。
レイの方向ベクトル。このベクトルの長さが重要であることに注意してください、長さよりも遠い部品/地形はテストされません。
レイキャスト操作でヒットの資格を指定するオブジェクト。提供されない場合、すべてのパーツが考慮され、Terrain場合にデフォルト値が使用されます。
戻り値
コードサンプル
Casts a ray and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castRay()
-- The origin point of the ray
local originPosition = Vector3.new(0, 50, 0)
-- The direction the ray is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the ray
local distance = 50
-- Cast the ray and create a visualization of it
local raycastResult = Workspace:Raycast(originPosition, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Ray intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between ray origin and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a ray every 2 seconds
while true do
castRay()
task.wait(2)
end
Shapecast
パラメータ
戻り値
Spherecast
指定された方向に球形の形状を投げ、BasePart または Terrain セルで最初の衝突を返します。これは、WorldRoot:Raycast() が線形レイを方向に投射して衝突を検出する方法と同様ですが、レイではなく 3D 形状を使用します。
とは異なり、このメソッドは最初に形を交差させる を検出しません。
ヒットが検出された場合、RaycastResult にヒット情報が含まれるヒットが返されます。Distance プロパティは、形状がヒットを見つけるために移動する距離を表し、Position プロパティは、ヒットを引き起こす交差点を表します。
このメソッドは、無効な半径または方向入力が渡された場合にエラーをスローします。
パラメータ
キャスト球形の形状の初期位置。
スタッドでキャスト円形の形状の半径。最大半径は 256 スタッドです。
形状キャストの方向、そして量が形状が移動できる最大距離を表す。最大距離は 1024 スタッドです。
戻り値
コードサンプル
Casts a sphere and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.
local Workspace = game:GetService("Workspace")
local function castSphere()
-- The initial position of the cast spherical shape
local originPosition = Vector3.new(0, 50, 0)
-- The radius of the cast spherical shape in studs
local radius = 10
-- The direction the sphere is cast in
local direction = -Vector3.yAxis
-- The maximum distance of the cast
local distance = 50
-- Cast the sphere and create a visualization of it
local raycastResult = Workspace:Spherecast(originPosition, radius, direction * distance)
if raycastResult then
-- Print all properties of the RaycastResult if it exists
print(`Sphere intersected with: {raycastResult.Instance:GetFullName()}`)
print(`Intersection position: {raycastResult.Position}`)
print(`Distance between sphere's initial position and result: {raycastResult.Distance}`)
print(`The normal vector of the intersected face: {raycastResult.Normal}`)
print(`Material hit: {raycastResult.Material.Name}`)
else
print("Nothing was hit")
end
end
-- Continually cast a sphere every 2 seconds
while true do
castSphere()
task.wait(2)
end
StepPhysics
指定された時間増加とオプションの BasePart セットに基づいて、世界のパーツのシミュレーションを前進させます。パーツのセットが指定されると、これらのパーツのみがシミュレートされ、世界の他のすべてのパーツはアンカーとして扱われます。この引数を省略すると、世界のすべてのパーツがシミュレーションに含まれます。指定された時間増加は、より大きな値で時間実行を増加させる正の数字であることができます。時間増分の値によって、物理システムはシミュレーションの精度と安定性を維持するために、複数の個々のステップに分割する可能性があります。機能が複数の置換を実行しても、シミュレーションの結果は機能が完了した後にのみ表示されます。シミュレーションの個々のステップを視覚化するには、RunService.RenderStepped イベントを介して RenderStep ごとに 1回機能を呼び出すことができます。
パラメータ
シミュレートされる時間の量。この引数は正の数字でなければなりません。大きな値は、この関数の実行時間を増加させます。
シミュレートされるパーツのオプションの配列。このセットには、タイプ BasePart のインスタンスが含まれている必要があり、他のタイプは無視されます。
戻り値
コードサンプル
Simulates the parts in the workspace for a fixed period of time by calling the StepPhysics function once per frame until a specified time has elaspsed.
local RunService = game:GetService("RunService")
-- Optional array of parts to simulate; otherwise all parts will be simulated
local partsToSimulate = {
workspace.Part,
}
local function simulateParts(duration)
local time = 0.0
local stepJob
stepJob = RunService.RenderStepped:Connect(function(dt)
if time + dt > duration then
dt = duration - time
end
workspace:StepPhysics(dt, partsToSimulate)
time = time + dt
if time >= duration then
stepJob:Disconnect()
end
end)
end
-- Simulate workspace parts for 5 seconds, stepping the parts once per frame
simulateParts(5.0)