Workspace

显示已弃用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

无法创建
服务

Workspace 的核心任务是保持在 3D 世界中存在的对象,有效地 BasePartsAttachments 。虽然这些对象是 Workspace 的子孙,但它们将是活的。对于 BaseParts , 这意味着它们将被渲染, 并且物理地与其他部分和世界互动。对于 Attachments , 这意味着被装饰的对象, 例如 ParticleEmitters , Beams , 和 BillboardGuis , 将渲染。

了解此行为很重要,因为它意味着对象可以在不需要时从 Workspace 中删除。例如,当播放另一张地图时,可以移除地图 Models 。在 3D 世界中没有立即需要的对象通常存储在 ReplicatedStorageServerStorage 中。

在其作为活动 3D 对象持有人的角色中,Workspace 包含一系列与零件、其位置和之间的连接相关的有用功能。

访问工工作间

Workspace 可以通过多种方式访问,所有方式都有效。

  • workspace
  • game:GetService("Workspace")
  • game.Workspace
注释

概要

属性

继承自Model属性继承自PVInstance属性

方法

继承自WorldRoot方法继承自Model方法继承自PVInstance方法
  • 写入并联

    获取 PVInstance 的枢轴。

  • PivotTo(targetCFrame : CFrame):()

    将 以及所有其子孙 转换为位于指定 的位置,使旋转点现在位于指定的 。

活动

属性

AirDensity

读取并联

在 RMU/stud³ 单位中的地面等级 ( Y 的 0) 空气密度 (见 Roblox 单位 ),用于计算如果 Workspace.FluidForcesExperimental 的空气动力力。默认值对应标准温度和压力下的实际海平面空气密度。空气密度随着 Y 高度增加而下降,在 100,000 格上达到其地面等级值的 5%。在 0 下 Y 的 0,空气密度固定在输入值上。

AllowThirdPartySales

未复制
读取并联

这个 Workspace 属性决定是否可以在游戏中出售由其他使用创建的资产。

什么是第三方销售?

当此值为 false 时,由于默认值为 false,只有地点创建者 (无论是玩家还是群组) 和 Roblox 创建的资产才能使用 MarketplaceService 进行出售。

在大多数情况下,游戏不需要出售第三方资产。然而,一些游戏,例如交易聊天室,需要此功能,因此它作为选项提供。

我可以卖哪些第三方产品?

注意,开发者产品只能在与它们相关的游戏中出售,无论 AllowThirdPartySales 设置为什么。该属性影响游戏通行证服装

AvatarUnificationMode

不可写入脚本
读取并联

ClientAnimatorThrottling

读取并联

指定 Enum.ClientAnimatorThrottlingMode 用于本地客户端使用。

启用后,远程模拟的 Model 实例上的动画将开始限制。限制器使用以下计算限制强度:

  • Model相关的可见度 Camera
  • 游戏内 FPS
  • 活动动画数量

CurrentCamera

未复制
读取并联

本地玩家正在使用的 Camera 对象。

如何使用当前相机

当寻找客户端的 对象时,使用此属性而不是寻找名为 "Camera" 的子对象。

当你设置此属性时,所有其他 Camera 对象在 Workspace 中都被摧毁,包括以前的 CurrentCamera 。如果您将此属性设置为 nil 或为不是工作区子孙的相机(或 CurrentCamera 另外被摧毁),将创建并分配新的 Camera 。避免这些情况,因为摧毁相机可能会有意外后果。

了解更多信息,请参阅编写相机脚本

DistributedGameTime

未复制
读取并联

游戏运行的时间,以秒为单位,已经运行了。

尽管标题如此,此值目前不是“分布”在客户端和服务器上。相反,在服务器上它代表服务器运行了多久。在客户端上,它代表客户端与服务器连接的时间长度。

开发人员不应该依赖上述行为,并且这个属性可能在将来的客户端和服务器上同步。

寻找程序启动以来的时间的人应该使用“时间”函数代替。请参阅以下比较,了解 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 和其祖先 ModelsWorkspace 时,将它们转移到 nil 以做父系。这是防止地图上掉下来的零件永远掉下去的。

如果由于这种行为而移除的零件是 Model 中的最后一零件,那么该模型也将被移除。这适用于零件的所有模型祖先。

该属性位于 -50,000 和 50,000 之间,因为 BaseParts 在很大距离的起源处由于浮点不准确而无法正确模拟或渲染。

此属性可以由脚本阅读,但只能由插件、命令栏或 Studio 的属性窗口设置。

FluidForces

不可写入脚本
读取并联

启用此属性后,物理引擎会计算在 BaseParts 上的空气动力学力,其 EnableFluidForces 属性为真值。默认值、Default,关闭了空气动力力。请注意,此属性不能通过脚本设置,必须在 Studio 中切换。

GlobalWind

读取并联

该属性指定风通过体验的方向和强度,影响地形草、动态云和粒子。查看全球风文章以获取详细信息。

Gravity

读取并联

确定由重力引起的加速对落下的 BaseParts 应用。这个值以每秒钟的 studs 计算,默认值为 196.2 studs/秒 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

不可写入脚本
读取并联

设置角色头和配件是否应下载为 MeshPartsDefaultEnabled相同。如果启用此功能,内置虚拟形象将使用 MeshParts 为角色的头部和饰品。

ModelStreamingBehavior

不可写入脚本
读取并联

MoverConstraintRootBehavior

不可写入脚本
读取并联

控制使用以下限制之一的机制选择装配根部件的逻辑:

当此属性设置为 时,如果约束没有在两个部件之间传递力,这些约束将被忽略,当选择集装根部件时(一些例子是 设置为 , 设置为 或 设置为 )。

当此属性设置为 Enum.MoverConstraintRootBehaviorMode.Disabled 时,这些约束可能在选择装配根部件时被误认为是约束,导致在添加这些约束到机制时出现不一致的网络所有权和延迟。

PathfindingUseImprovedSearch

不可写入脚本
读取并联

PhysicsImprovedSleep

不可写入脚本
读取并联

PhysicsSteppingMethod

不可写入脚本
读取并联

设置解决器如何在时间上向前推进物理模拟。此选项不可脚本化,必须从 PhysicsSteppingMethod 属性的 工作区 内设置。请参阅适应性时间步骤获取详细信息。


<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

不可写入脚本
读取并联

流媒体最小半径 属性表示玩家角色或当前内容在最高优先级下将被流媒体的半径。默认为 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 中的物理不被应用到“睡眠”状态。 设置为真的,例如,将永远处于睡眠状态,因为物理对他们没有适用。当向未锚定的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() 返回客户端对服务器当前时间的最佳估计。这有助于创建同步体验,因为每个客户端都会获得相同的结果,无论其时区或本地时间如何。

这返回一个类似于 os.time() 的 Unix 时戳,可以与 os.date() 或与 DateTime.fromUnixTimestamp() 一起使用。

由此函数返回的时戳已被平滑,以便:

  • 它是单调的;它的值永远不会下降。
  • 它以与本地时钟相同的速度移至 0.6% 内。

GetServerTimeNow()DateTime.now() 昂贵,精度较低于 os.clock() ,因此应用于确保事件在正确的现实世界时间开始或定期调整以保持一系列事件的同步。

这个函数依赖服务器,因此从未连接的客户端调用将抛出错误。请注意,此函数不适合用于定时奖励等事情,因为它不安全地跟踪服务器上的计时器。

还见:


返回

服务器上的估计 Unix 时戳。

JoinToOutsiders

()

这个函数会在指定的 Parts 和任何接触部件之间创建节点,取决于零件的表面和指定的节点创建模式。

这个函数创建了指定零件和任何平面接触表面之间的连接,取决于零件的表面和指定的连接创建模式。

  • 胶水、钮扣、入口、通用、焊接和光滑表面都会创建焊接实例。
  • 球体不会与任何东西表面焊接。圆柱的圆角侧不会表面焊接,但平面边侧会。
  • 铰链和电机表面仍将创建 RotateRotateP 共同实例,无论零件形状如何。

第一个参数是一个 BaseParts 阵列。关节只能在阵列中的部件之间创建,而不是在阵数组中。阵数组中的零件之间不会创建关节。

第二个参数是一个 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 (之间) 之间的连接不会被破坏,只有在这些 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