WorldRoot

非推奨を表示

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

作成できません

このベースクラスは、WorkspaceWorldModel など、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.

PVInstance から継承した プロパティ
  • 複製されていません
    スクリプト作成できません
    並列読み取り
  • 複製されていません
    スクリプト作成できません
    並列読み取り

方法

Model から継承した 方法
  • AddPersistentPlayer(playerInstance : Player):()

    このモデルを指定されたプレイヤーに永続させるように設定します。ModelStreamingMode は、追加の結果として動作が変更されるため、PersistentPerPlayer に設定する必要があります。

  • モデルのすべての部分を含むボリュームの説明を返します。

  • 返すのは、BaseParts すべてを含む最小のバインディングボックスのサイズ、そして Model に沿って設定されている場合、Model.PrimaryPart と一致します。

  • このモデルオブジェクトが持続するすべての Player オブジェクトを返します。動作は、このメソッドが Script または LocalScript から呼ばれるかどうかによって異なります。

  • モデルの正規スケールを返し、新しく作成されたモデルにはデフォルトで 1 が割り当てられ、Model/ScaleTo を介してスケールすると変更されます。

  • MoveTo(position : Vector3):()

    PrimaryPart を指定された位置に移動します。プライマリパーツが指定されていない場合、モデルのルートパーツが使用されます。

  • RemovePersistentPlayer(playerInstance : Player):()

    指定されたプレイヤーのために、このモデルを永続しないようにします。ModelStreamingMode は、削除の結果として動作が変更されるために PersistentPerPlayer に設定する必要があります。

  • ScaleTo(newScaleFactor : number):()

    モデルのスケール因子を設定し、すべての子インスタンスのサイズと場所を調整して、スケール因子が 1 のときと比較して、そのスケール因子が初期のサイズと場所に関連しているようにします。

  • TranslateBy(delta : Vector3):()

    指定された オフセットによってシフトし、モデルの向きを保持します。新しい位置に別の BasePart または Terrain がすでに存在する場合、Model はそのオブジェクトをオーバーライドします。

PVInstance から継承した 方法

プロパティ

方法

ArePartsTouchingOthers

ArePartsTouchingOthers は、指定された BasePart の少なくとも 1 つが他のパーツに触れている場合、真を返します。距離制限内にある場合、2つのパーツは「タッチ」と考えられます、overlapIgnored

パーツが提供されない場合、false が返されます。

パラメータ

partList: Instances

リストにあるパーツがリストにないパーツに触れているかどうかをチェックするパーツチェックのリスト。

既定値: ""
overlapIgnored: number

パーツが接触すると考えられる前に無視されるスタッドのパーツオーバー境界。

既定値: 0.000199999995

戻り値

パーツリストにないパーツのいずれかがタッチしている場合のみ が true、パーツがパスされない場合は false。

コードサンプル

以下のコードブロックでは、WorldRoot:ArePartsTouchingOthers() を使用して、リストのパーツがリストにないワークスペースのパーツに触れているかどうかをチェックする方法を示します。

まずスクリプトは、1スタッドオーバーする 2つの正方形のパーツを作成します、Part1Part2 。次に、パーツ1が partList にパスされると、ArePartsTouchingOthers() によって返された値を三つの重複値で印刷します:00.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 、サイズ、または方向の入力がパスされた場合、エラーをスローします。

パラメータ

cframe: CFrame

キャストブロックの形状の初期位置と回転。

既定値: ""
size: Vector3

キャストブロックの形状のサイズをスタッドで表します。最大サイズは 512 スタッドです。

既定値: ""
direction: Vector3

形状キャストの方向、そして量が形状が移動できる最大距離を表す。最大距離は 1024 スタッドです。

既定値: ""
既定値: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

戻り値

シェイプキャスト操作の結果、または nil 適格な BasePart または Terrain セルがヒットしなかった場合を含みます。

コードサンプル

Casts a block and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.

Blockcasting

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 プロパティと接合モデルを設定するだけで、大多数の場合に十分速いです。

パラメータ

partList: Instances
既定値: ""
cframeList: Array
既定値: ""
既定値: "FireAllEvents"

戻り値

()

GetPartBoundsInBox

Instances
並列書き込み

WorldRoot:GetPartBoundsInBox() は、 バインディングボックス が指定された中心 ( CFrame ) とサイズ ( Vector3 ) で箱のボリュームを記述する箱に重複するパーツのアレイを返します。

強調されたように、この空間クエリメソッドは、実際の占有ボリュームではなく、パーツのバインディングボックスのボリュームを効率的に考慮します。これは、円筒、球、連合、およびブロック形状のない MeshParts を考慮するときに重要かもしれません。特に精度が重要な場合は、WorldRoot:GetPartsInPart() を代わりに使用するか、このメソッドの結果を自分でさらにフィルタリングします。

このメソッドは、 オブジェクトを使用して、包含または排除リスト、最大部品数、使用する衝突グループ、およびクエリが交差する部分の値を説明することで、空間クエリの再利用可能な部分を説明します。

パラメータ

cframe: CFrame

クエリ対象のボックスボリュームの中心の場所。

既定値: ""
size: Vector3

クエリーする指定されたボックスボリュームのサイズ。

既定値: ""
overlapParams: OverlapParams

空間クエリパラメータの再利用可能な部分を含みます。

既定値: "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

戻り値

Instances

空間クエリに一致する BaseParts の配列。

GetPartBoundsInRadius

Instances
並列書き込み

WorldRoot:GetPartBoundsInRadius() は、 バインディングボックス が重複するパーツのアレイを返し、指定された中心 ( Vector3 ) と半径 (number) で説明されるスフィアのボリュームを使用します。

強調されたように、この空間クエリメソッドは、実際の占有ボリュームではなく、パーツのバインディングボックスのボリュームを効率的に考慮します。これは、円筒、球、連合、およびブロック形状のない MeshParts を考慮するときに重要かもしれません。特に精度が重要な場合は、WorldRoot:GetPartsInPart() を代わりに使用するか、このメソッドの結果を自分でさらにフィルタリングします。

このメソッドは、 オブジェクトを使用して、包含または排除リスト、最大部品数、使用する衝突グループ、およびクエリが交差する部分の値を説明することで、空間クエリの再利用可能な部分を説明します。

パラメータ

position: Vector3

クエリ対象の指定された球体ボリュームの中心の位置。

既定値: ""
radius: number

クエリ対象の指定された球体ボリュームの半径。

既定値: ""
overlapParams: OverlapParams

空間クエリパラメータの再利用可能な部分を含みます。

既定値: "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

戻り値

Instances

空間クエリに一致する BaseParts の配列。

GetPartsInPart

Instances
並列書き込み

WorldRoot:GetPartsInPart() は、占有スペースが指定されたパーツと共有されるパーツのアレイを返します (これは、クエリ対象のパーツと同じ WorldRoot に存在する必要があります)。このメソッドは BasePart:GetTouchingParts() の代わりに使用でき、一般的にはより良い選択です。

注意してください、この空間クエリメソッドは、完全な幾何的衝突検チェックを使用して、指定されたパーツが占有する 正確なボリューム を考慮します。例えば、凹状/空洞の部品は、実際にその部分を重複/タッチしない限り、クエリされた部品と一致しません。よりシンプルなボリュームの場合は、WorldRoot:GetPartBoundsInBox() または WorldRoot:GetPartBoundsInRadius() を使用することを検討してください。これらはより正確ではありませんが、より効率的に実行されます。

このメソッドは、 オブジェクトを使用して、包含または排除リスト、最大部品数、使用する衝突グループ、およびクエリが交差する部分の値を説明することで、空間クエリの再利用可能な部分を説明します。

パラメータ

part: BasePart

他のパーツと比較するボリュームのある部分。

既定値: ""
overlapParams: OverlapParams

空間クエリパラメータの再利用可能な部分を含みます。

既定値: "OverlapParams{MaxParts=0, Tolerance=0, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

戻り値

Instances

空間クエリに一致する BaseParts の配列。

IKMoveTo

()
プラグインのセキュリティ

この機能は、逆キネマティクスを介して、指定されたパーツを指定された場所に移動し、そこに直接移動するのではなく、任意のジョイント、constraints、またはパーツが参加しているコライドが物理的に満足するようにするため、この機能は、指定されたパーツを指定された場所に移動します。現在、この機能は、実行中のゲームの物理との衝突のため、Studio にのみ plugins で利用可能です。

剛性を翻訳 は、パーツの位置をターゲットの CFrame の位置とどれほど攻撃的に一致させるかを指定する 0 から 1 の数字です。 剛性を回転 は、パーツの回転をターゲットの CFrame の回転部分とどれほど攻撃的に一致させるかを指定する 0 から 1の数字です。

例えば:

  • 翻訳強度と回転強度が両方とも 1 で同じ場合、パーツは物理的な制約が存在しても、ターゲットの CFrame に正確に移動されます。
  • 翻訳強度と回転強度の両方が 0.5 で同じ場合、パーツはターゲットの CFrame に正確に移動しようとしますが、物理的な制約により道を外される可能性があります。
  • 翻訳強度と回転強度が両方とも 0 で同じ場合、ターゲットの CFrame は無視され、物理的な制約は対象の位置で解決されます。

パラメータ

part: BasePart

移動中のパーツ。

既定値: ""
target: CFrame

指定されたパーツを移動する場所。

既定値: ""
translateStiffness: number

0から1の数字で、パーツの位置をターゲットの位置とどれほど攻撃的に一致させるかを指定します。 CFrame .

既定値: 0.5
rotateStiffness: number

0から1の数字で、パーツの回転をターゲットの回転とどれほど攻撃的に一致させるかを指定します。 CFrame

既定値: 0.5
collisionsMode: Enum.IKCollisionsMode

物理解像で影響を受けるオブジェクトを指定できます。

既定値: "OtherMechanismsAnchored"

戻り値

()
並列書き込み

起源、方向、オプションの RaycastParams を使用してレイを投射します。有効な BasePart または Terrain セルを見つけた場合、操作の結果を含む RaycastResult が返されます。RaycastParams オブジェクトが提供されない場合、デフォルトが使用されます (すべてのパーツが考慮され、Terrain 水は無視されません)。

注意してください、方向ベクトルの長さ (大きさ) は重要であり、長さよりも遠いオブジェクト/地形はテストされません。 を使用してレイコンポーネントを作成するのを助けている場合、下の例に示すように、方向ベクトルとして を使用し、必要な長さを乗算してください。方向ベクトルの最大長は 15,000 スタッドです。

このメソッドは 使用しない オブジェクト Ray を使用しませんが、起源と方向コンポーネントは Ray.OriginRay.Direction から借用できます。

パラメータ

origin: Vector3

レイの起点。

既定値: ""
direction: Vector3

レイの方向ベクトル。このベクトルの長さが重要であることに注意してください、長さよりも遠い部品/地形はテストされません。

既定値: ""
raycastParams: RaycastParams

レイキャスト操作でヒットの資格を指定するオブジェクト。提供されない場合、すべてのパーツが考慮され、Terrain場合にデフォルト値が使用されます。

既定値: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

戻り値

レイキャスト操作の結果、または nil 如果適切な BasePart または 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.

Raycasting

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

パラメータ

part: BasePart
既定値: ""
direction: Vector3
既定値: ""
既定値: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

戻り値

Spherecast

並列書き込み

指定された方向に球形の形状を投げ、BasePart または Terrain セルで最初の衝突を返します。これは、WorldRoot:Raycast() が線形レイを方向に投射して衝突を検出する方法と同様ですが、レイではなく 3D 形状を使用します。

とは異なり、このメソッドは最初に形を交差させる を検出しません。

ヒットが検出された場合、RaycastResult にヒット情報が含まれるヒットが返されます。Distance プロパティは、形状がヒットを見つけるために移動する距離を表し、Position プロパティは、ヒットを引き起こす交差点を表します。

このメソッドは、無効な半径または方向入力が渡された場合にエラーをスローします。

パラメータ

position: Vector3

キャスト球形の形状の初期位置。

既定値: ""
radius: number

スタッドでキャスト円形の形状の半径。最大半径は 256 スタッドです。

既定値: ""
direction: Vector3

形状キャストの方向、そして量が形状が移動できる最大距離を表す。最大距離は 1024 スタッドです。

既定値: ""
既定値: "RaycastParams{IgnoreWater=false, BruteForceAllSlow=false, RespectCanCollide=false, CollisionGroup=Default, FilterDescendantsInstances={}}"

戻り値

シェイプキャスト操作の結果、または nil 適格な BasePart または Terrain セルがヒットしなかった場合を含みます。

コードサンプル

Casts a sphere and returns the first collision with a BasePart or Terrain. Prints the properties of the RaycastResult if a result was hit.

Spherecasting

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回機能を呼び出すことができます。

パラメータ

dt: number

シミュレートされる時間の量。この引数は正の数字でなければなりません。大きな値は、この関数の実行時間を増加させます。

既定値: ""
parts: Instances

シミュレートされるパーツのオプションの配列。このセットには、タイプ 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.

StepPhysics

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)

イベント