Workspace

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立
服務

Workspace 的核心工作是保持在3D世界中存在的對象,有效地BasePartsAttachments 。雖然這些對象是 Workspace 的子孫,但它們將會活躍。對於 BaseParts , 這意味著它們將被渲染,並且會物理地與其他零件和世界互動。對於 Attachments , 這意味著被裝飾的對象,例如 ParticleEmitters , BeamsBillboardGuis ,將成像。

了解此行為很重要,因為它意味著對象在不需要時可以從 Workspace 中移除。例如,當在播放不同地圖時,可以移除地圖 Models 。在 3D 世界中未即時需要的物件通常會儲存在 ReplicatedStorageServerStorage 中。

在作為活動 3D 對象持有人的角色中,Workspace 包含一系列與零件、其位置和之間的關節相關的有用功能。

存取工作區

Workspace 可以採用多種方式存取,所有方式都有效。

  • workspace
  • game:GetService("Workspace")
  • game.Workspace
注意事項

概要

屬性

屬性 繼承自 Model屬性 繼承自 PVInstance

方法

方法 繼承自 WorldRoot方法 繼承自 Model方法 繼承自 PVInstance
  • 平行寫入

    獲得 PVInstance 的軸心。

  • PivotTo(targetCFrame : CFrame):()

    將 以及所有其子孫 轉換為指定的 位置,使旋轉點現在位於指定的 位置。

活動

屬性

AirDensity

平行讀取

在 RMU/學³ 單位中的地面等級 ( Y 的 0) 空氣密度 (見 Roblox 單位 ),用於計算如果 Workspace.FluidForcesExperimental 時的空氣動力力。預設對應標準溫度和壓力下的實際海平面空氣密度。空氣密度會隨著 Y 高度增加而衰減,在 100,000 個單位上達到其地面等級值的 5%。在 0 下 Y 的 0,空氣密度被固定在輸入值上。

AllowThirdPartySales

未複製
平行讀取

這個 Workspace 屬性決定是否可以在遊戲中出售其他使用創建的資產。

第三方銷售是什麼?

當此值為假值時,即使預設值,只有位置創建者(是玩家或群組)和 Roblox 創建的資產才能使用 MarketplaceService 來出售。

在大多數情況下,遊戲不需要出售第三方資產。然而,一些遊戲,例如交易聊天室,需要此功能,因此它作為選擇選項存在。

我可以出售哪些第三方產品?

注意,開發者產品只能在與它們相關的遊戲中出售,無論 AllowThirdPartySales 設置為什麼。此特性影響 遊戲通行證服裝

AvatarUnificationMode

無法建立指令碼
平行讀取

ClientAnimatorThrottling

平行讀取

指定 Enum.ClientAnimatorThrottlingMode 用於本地客戶端。

啟用時,遠端模擬的 Model 實例上的動畫將開始限制。限制器使用以下計算來計算限制強度:

  • Model 相關的可見度 Camera
  • 遊戲內的FPS
  • 活動動畫數量

CurrentCamera

未複製
平行讀取

本地玩家使用的 Camera 對象。

如何使用現有相機

當尋找客戶的 對物件時,請使用此屬性,而不是尋找名為 "Camera" 的子對象。

當您設置此屬性時,所有其他 Camera 對象在 Workspace 中都被摧毀,包括以前的 CurrentCamera 。如果您將此屬性設為 nil 或屬於工作區的子孫的相機 (或 CurrentCamera 否則毀滅),將創建並分配一個新的 Camera 。避免這些情況,因為破壞相機可能會有未預期的後果。

欲了解更多信息,請參閱腦寫相機

DistributedGameTime

未複製
平行讀取

遊戲運行的時間,以秒為單位,已經過了。

雖然標題如此,此值目前並未在客戶端和伺服器上「分佈」。相反,在服務器上代表服務器已運行多久。在客戶端上,它代表客戶端與伺服器連線的時間長度。

開發人員不應該依賴上述行為,並且這個屬性可能會在未來的客戶端和伺服器上同步。

尋找程式開始運行後的時間的人應該使用「time」函數取代。請參閱以下比較 DistributedGameTime 與其替代方案之間的內容。


local Workspace = game:GetService("Workspace")
print(Workspace.DistributedGameTime) -- Time the game started running
print(os.time()) -- Time since epoch (1 January 1970, 00:00:00) UTC
print(tick()) -- Time since epoch (1 January 1970, 00:00:00) system time
print(time()) -- Time the game started running
print(elapsedTime()) -- Time since Roblox started running

FallHeightEnabled

外掛程式安全性
平行讀取

FallenPartsDestroyHeight

外掛程式安全性
平行讀取

此屬性決定 Roblox 引擎會自動從 BaseParts 和其祖先 Models 中移除到 Workspace 的高度,以將它們轉移到 nil 。這是防止地圖上掉落的零件永遠掉落的方法。

如果由於這種行為而移除的零件是 Model 中最後一個零件,那個模型也會被移除。這適用於零件的所有模型祖先。

此屬性夾在 -50,000 和 50,000 之間,因為 BaseParts 在很大距離的起源處無法正確模擬或渲染,這是因為浮點不準確。

此屬性可以由腳本閱讀,但只能由插件、指令欄或 Studio 的屬性窗口設置。

FluidForces

無法建立指令碼
平行讀取

啟用此屬性後,物理引擎會在 BaseParts 上計算氣動力,其 EnableFluidForces 屬性為真實。預設值、Default,會停用空氣動力。請注意,此屬性無法通過腳本設置,必須在 Studio 中切換。

GlobalWind

平行讀取

此屬性指定風通過體驗的方向和強度,影響地形草、動態雲和粒子。查看 全球風 文章的詳情。

Gravity

平行讀取

決定由重力引起的加速對陷落的 BaseParts 應用。此值以每秒鐘厘米為單位,預設值為 196.2 厘米/秒 2 。通過變更此值,開發人員可以模擬遊戲中低或高重力的效果。

範例程式碼

This script creates a touch pad in the workspace that, when touched, will reduce the game's gravity. Activating the pad again will switch back to normal gravity.

Low Gravity Button

local MOON_GRAVITY_RATIO = 1.62 / 9.81
local DEFAULT_GRAVITY = 196.2
local MOON_GRAVITY = DEFAULT_GRAVITY * MOON_GRAVITY_RATIO
-- Create a touch pad
local pad = Instance.new("Part")
pad.Size = Vector3.new(5, 1, 5)
pad.Position = Vector3.new(0, 0.5, 0)
pad.Anchored = true
pad.BrickColor = BrickColor.new("Bright green")
pad.Parent = workspace
-- Listen for pad touch
local enabled = false
local debounce = false
local function onPadTouched(_hit)
if not debounce then
debounce = true
enabled = not enabled
workspace.Gravity = enabled and MOON_GRAVITY or DEFAULT_GRAVITY
pad.BrickColor = enabled and BrickColor.new("Bright red") or BrickColor.new("Bright green")
task.wait(1)
debounce = false
end
end
pad.Touched:Connect(onPadTouched)

IKControlConstraintSupport

無法建立指令碼
平行讀取

啟用對 IKControls 的限制支持。DefaultEnabled相同。如果停用,IKControls會忽略物理限制。見 IKControl 獲得額外細節。

InsertPoint

未複製
平行讀取

MeshPartHeadsAndAccessories

無法建立指令碼
平行讀取

設置角色頭和配件應下載為 MeshParts 。值 Default 與值 Enabled 相同。如果此功能已啟用,內置的化身將使用 MeshParts 為角色的頭部和配件。

ModelStreamingBehavior

無法建立指令碼
平行讀取

MoverConstraintRootBehavior

無法建立指令碼
平行讀取

控制使用任何以下限制的機制選擇裝配根部分的邏輯:

當此屬性設為 時,如果限制沒有在兩個零件之間傳送力量,這些限制將被忽略,當選擇裝配根部分時(一些例子是 設為 , 設為 或 設為 )。

當此屬性設為 Enum.MoverConstraintRootBehaviorMode.Disabled 時,這些限制可能會在選擇裝配根部分時誤認為存在,導致在將這些限制添加到機制時出現不一致的網路擁有權和延遲。

PathfindingUseImprovedSearch

無法建立指令碼
平行讀取

PhysicsImprovedSleep

無法建立指令碼
平行讀取

PhysicsSteppingMethod

無法建立指令碼
平行讀取

設定解決器將如何在時間上向前推進物理模擬。此選項無法腳本化,必須從 Studio 的 物理步驟方法 屬性中設置 工作區 內。請參閱適應時間步驟了解詳情。


<th>說明</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>適應</b></td>
<td>引擎嘗試為每個裝配單元(240 Hz、120 Hz 或 60 Hz)分配最佳模擬速率。此設定最適合於履約。</td>
</tr>
<tr>
<td><b>已修復</b></td>
<td>工作區內所有模擬裝配都會以 240 Hz 的速度前進。這個選項最適合最佳穩定性和模擬準確度。</td>
</tr>
<tr>
<td><b>預設</b></td>
<td>目前的預設值是 <b>已修復</b>。</td>
</tr>
</tbody>
選項

請注意,當不同模擬速率的組件通過 Constraints 或碰撞連接時,結合機制將默認為穩定性最高的模擬速率。

PlayerCharacterDestroyBehavior

無法建立指令碼
平行讀取

PrimalPhysicsSolver

無法建立指令碼
平行讀取

RejectCharacterDeletions

無法建立指令碼
平行讀取

RenderingCacheOptimizations

無法建立指令碼
平行讀取

ReplicateInstanceDestroySetting

無法建立指令碼
平行讀取
平行讀取

SandboxedInstanceMode

無法建立指令碼
平行讀取

SignalBehavior

無法建立指令碼
平行讀取

此屬性決定事件處理器在事件發生時是否會立即恢復,或會被延遲,然後在稍後的恢復點恢復。暫停點目前包括:

欲了解更多信息,請參閱延遲事件

StreamOutBehavior

無法建立指令碼
平行讀取

輸出行為 控件是在裝置記憶條件或基於傳輸範圍的情況下,從內容中卸下的地方。

也見:

StreamingEnabled

外掛程式安全性
平行讀取

StreamingEnabled 屬性決定遊戲內容傳輸是否為該空間點啟用。此屬性無法寫入腳本,因此必須在 Studio 的 工作區 對象上設置。

也見:

StreamingIntegrityMode

無法建立指令碼
平行讀取

如果實例 傳輸 已啟用,體驗可能會以未預期的方式行動,如果玩家的角色移動到世界上一個尚未傳輸到其客戶端的區域。傳輸完整性功能提供一種方法來避免這些可能問題的情況。

StreamingMinRadius

無法建立指令碼
平行讀取

傳輸最小範圍 屬性指示玩家角色或目前的 ReplicationFocus 範圍內的內容將以最高優先級進行傳輸。預設為 64 個單位。

當增加預設最小範圍時,應該小心,因為這會需要更多記憶和更多伺服器帶寬,而忽略其他組件。

也見:

StreamingTargetRadius

無法建立指令碼
平行讀取

傳輸目標範圍 屬性控制最大距離離開玩家的角色或目前的 ReplicationFocus 在哪裡內容將被傳輸。預設為 1024 個單位。

請注意,引擎可以保留先前載入的內容超出目標範圍,存取記憶允許。

也見:

Terrain

唯讀
未複製
平行讀取

此屬性是指向 Terrain 對象,該對象被引用到 Workspace

Terrain object within the Workspace hierarchy

請參閱環境地形以獲得更多資訊。

TouchEventsUseCollisionGroups

無法建立指令碼
平行讀取

TouchesUseCollisionGroups

無法建立指令碼
平行讀取

此屬性決定不同群組設為不會碰撞的 parts 是否會忽略碰撞和觸碰事件。預設值為此屬性的值設為 false

當此特性啟用時,不同群組設定不會碰撞的零件也會忽略 CanTouch 屬性,與 BasePart.CanCollide 被忽略的方式相似。若要了解更多關於 CanTouch 的行為資訊,請前往其屬性頁面。

方法

GetNumAwakeParts

平行寫入

返回被認為最近受到物理學影響的 BaseParts 數量,因為它們被認為是物理上活躍的。

此功能提供對多少 BaseParts 被物理力影響或最近受到物理力影響的測量。


local Workspace = game:GetService("Workspace")
print(Workspace:GetNumAwakeParts())

睡眠與醒來零件

為了確保良好的履約,Roblox 設置 BaseParts 在物理不被應用到「睡眠」狀態時。BaseParts 設為真實的,例如BasePart.Anchored,將永遠睡眠,因為物理學對他們不適用。當對未錨定的BasePart施加力時,將應用「清醒」狀態。當 BasePart 醒來時,Roblox 物理引擎會進行連續計算,以確保物理力與零件正確互動。一旦 BasePart 不再受物理力影響,它就會回到「睡眠」狀態。


返回

醒來的零件數量。

GetPhysicsThrottling

平行寫入

返回一個整數,介於 0 和 100 之間,代表物理模擬目前被限制到的實時百分比。

此功能可用於確定是否,以及到什麼程度,物理瓶頸發生了。

物理限制是什麼?

物理限制發生時,物理引擎偵測到無法與遊戲同步實時。當物理被限制時,它會更少地更新,導致 BaseParts 看起來移動速度更慢。

無需限制,物理模擬將與遊戲失去同步,進一步落後。這可能會導致更低的幀率和其他不良行為。

Humanoids 相關的物件免受物理限制。

也見 Workspace:SetPhysicsThrottleEnabled()

展示物理限制

開發人員應該總是避免創建超載物理引擎的地點,因為它會導致玩家體驗降低。但是,希望用於研究目的模擬物理限制的人,只需要很快創建大量 Parts 即可。


local Workspace = game:GetService("Workspace")
local i = 0
while true do
i += 1
if i % 5 == 0 then
task.wait()
end
local part = Instance.new("Part", Workspace)
end

返回

物理模擬目前被限制到實時的百分比。

GetRealPhysicsFPS

平行寫入

返回物理目前正在模擬的每秒幀數。

使用 GetRealPhysicsFPS 來對抗漏洞利用者

常見的使用此功能是偵測是否有惡意程式正在提升本地物理框架速率以更快移動。這通常由比較客戶的 GetRealPhysicsFPS 返回的結果與在正常情況下不會被侵犯的最大值(通常為 65 或 70)來完成。如果此限制被違反,開發人員可以使用 Player:Kick() 函數來從遊戲中移除那個 Player 。要記住,雖然這種做法有時可能有效,但客戶端反濫用措施永遠不會是 100% 可靠的。


返回

返回物理目前正在模擬的每秒幀數。

範例程式碼

Speed exploiters commonly increase their local physics FPS in order to increase their character speed. This can be detected from a LocalScript by checking if the player's physics FPS is over the maximum:

Workspace:GetRealPhysicsFPS

local Players = game:GetService("Players")
local player = Players.LocalPlayer
while task.wait(1) do
if workspace:GetRealPhysicsFPS() > 65 then
player:Kick()
end
end

GetServerTimeNow

平行寫入

GetServerTimeNow() 返回客戶端對伺服器當前時間的最佳估計。這有助於創建同步體驗,因為每個客戶都會獲得相同的結果,無論時區或本地時間如何。

這會返回一個 Unix 時間戳,類似於 os.time() ,可以與 os.date()DateTime.fromUnixTimestamp() 使用。

由此函數返回的時戳已被平滑,以便:

  • 它是單調的;它的值永遠不會減少。
  • 它以相同速度移至本地時間至 0.6% 內。

GetServerTimeNow()DateTime.now() 昂貴,且精度低於 os.clock() ,因此應該用於確保事件在正確的實世時間開始或定期調整以保持一系列事件的同步。

這個功能依靠服務器,因此從未連線的客戶端呼叫它會發生錯誤。請注意,此功能不適合用於定時獎勵等事情,因為它不安全地跟蹤伺服器上的定時器。

也見:


返回

伺服器上估計的 Unix 時戳。

JoinToOutsiders

()

這個功能會在指定的 Parts 和任何接觸部件之間創建聯結,取決於零件的表面和指定的聯結創建模式。

這個功能會創建特定零件和任何平面接觸表面之間的節點,取決於零件的表面和指定的節點創建模式。

  • 膠水、螺柱、入口、通用、焊接和平滑表面都會創建焊接實例。
  • 球體不會與任何物體表面焊接。圓柱的圓角側不會表面焊接,但平面端側會。
  • 鉸和馬達表面仍會創建 RotateRotateP 聯合實例,無論零件形狀如何。

第一個參數是一個 BaseParts 陣列。關節只會在 array 中的零件之間創建,而不是在 array 中。在陣列中的零件之間不會創建聯結。

第二個參數是 Enum.JointCreationMode ,它決定如何創建聯結。傳入枚列值、Enum.JointCreationMode.AllEnum.JointCreationMode.Surface 時,行為相同,即總是加入

此功能由 Roblox Studio 移動工具在使用者完成移動選擇後使用。結合 Plugin:GetJoinMode()Workspace:UnjoinFromOutsiders() 可用於開發自定義工作室構建工具時保留聯結功能。請參閱下面的片段作為範例。


local Workspace = game:GetService("Workspace")
-- 已完成移動選擇;製作聯結
local function finishedMovingParts(parts)
local joinMode = Plugin:GetJoinMode()
Workspace:JoinToOutsiders(parts, joinMode)
end

local Workspace = game:GetService("Workspace")
-- 開始移動選擇;打破聯結
local function startMovingParts(parts)
Workspace:UnjoinFromOutsiders(parts)
end

參數

objects: Instances

一個由 BaseParts 組成的數組,用於將節點連接起來。

預設值:""

要使用的 Enum.JointCreationMode 。傳入 Enum.JointCreationMode.AllEnum.JointCreationMode.Surface 具有相同的行為,即總是加入。

預設值:""

返回

()

PGSIsEnabled

返回 true 如果遊戲啟用了PGS物理解決器。

由於無法透過腳本存取 Workspace.PGSPhysicsSolverEnabled,PGSIsEnabled 函數讓開發人員告知遊戲正在使用哪個物理解決器。


返回

PGS解決器啟用時為真。

UnjoinFromOutsiders

()

破壞指定的 BaseParts 和其他 BaseParts 之間的所有關節。

此功能需要一個 BaseParts 陣列。注意,這些 BaseParts (之間) 的節點不會在 array 中破碎,只能在這些 BaseParts 和其他 BaseParts 之間破碎。

此功能由 Roblox Studio 移動工具在使用者開始移動選擇時使用。結合 Plugin:GetJoinMode()Workspace:JoinToOutsiders() 可用於開發自定義 Studio 構建工具時保留聯結功能。請參閱下面的片段作為範例。


local Workspace = game:GetService("Workspace")
-- Finished moving a selection; make joints
local function finishedMovingParts(parts)
local joinMode = Plugin:GetJoinMode()
Workspace:JoinToOutsiders(parts, joinMode)
end

local Workspace = game:GetService("Workspace")
-- Started moving a selection; break joints
local function startMovingParts(parts)
Workspace:UnjoinFromOutsiders(parts)
end

參數

objects: Instances

一個由 BaseParts 組成的陣列,用於破壞關節的人。

預設值:""

返回

()

ZoomToExtents

()
外掛程式安全性

Workspace.CurrentCamera 放置和縮放以顯示目前在 BaseParts 中的 Workspace 範圍。

此功能曾在 Roblox Studio 的現已移除的「縮放到極限」按鈕中使用。它具有與「縮放到」(F捷徑方式)功能相似的行為,但它顯示的是Workspace 而不是目前選擇的對物件的範圍。

此功能無法在腳本中使用,但會在指令欄或插件中運行。


返回

()

活動

PersistentLoaded

此事件每當玩家傳送所有現有持久模型和零零碎的原子模型時,都會發生。player 參數指示哪個玩家已收到所有適用的實例。

請注意,體驗載入發生在永久載入之前,發射 DataModel.Loaded 事件不表示所有永久模型都存在。

參數

player: Player