Skip to content

Commit 3564640

Browse files
update Open Source Docs from Roblox internal teams
1 parent e1a010d commit 3564640

File tree

3 files changed

+608
-812
lines changed

3 files changed

+608
-812
lines changed

content/en-us/physics/sleep-system.md

Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,199 @@ Rotational velocity and acceleration thresholds reflect the velocity and acceler
100100
For a given angular velocity, the rotational velocity of an assembly is proportional to the assembly bounding sphere radius. This means that larger assemblies can rotate at a lower angular velocity without falling asleep.
101101
</Alert>
102102

103+
## Actuated joints
104+
105+
Sometimes developers want to move parts very slowly using an **actuated joint**, a constraint that applies force or motion to drive connected parts, such as a `Class.HingeConstraint` using a `Enum.ActuatorType.Motor|Motor`. To support these scenarios, assemblies connected to actuated joints use a stricter sleep velocity threshold. This delays when those assemblies fall asleep, allowing slow, controlled motion without the physics system prematurely putting them to sleep.
106+
107+
The following are considered actuated joints:
108+
109+
<table>
110+
<thead>
111+
<tr>
112+
<th>Constraint</th>
113+
<th>Configuration</th>
114+
<th>Required nonzero properties</th>
115+
</tr>
116+
</thead>
117+
<tbody>
118+
<tr>
119+
<td>`Class.AlignOrientation|AlignOrientation`</td>
120+
<td>`Class.AlignOrientation.RigidityEnabled|RigidityEnabled` = `false`</td>
121+
<td>
122+
<ul>
123+
<li>`Class.AlignOrientation.MaxAngularVelocity|MaxAngularVelocity`</li>
124+
<li>`Class.AlignOrientation.MaxTorque|MaxTorque`</li>
125+
<li>`Class.AlignOrientation.Responsiveness|Responsiveness`</li>
126+
</ul>
127+
</td>
128+
</tr>
129+
<tr>
130+
<td>`Class.AlignPosition|AlignPosition`</td>
131+
<td>`Class.AlignPosition.RigidityEnabled|RigidityEnabled` = `false`</td>
132+
<td>
133+
<ul>
134+
<li>`Class.AlignPosition.MaxVelocity|MaxVelocity`</li>
135+
<li>`Class.AlignPosition.Responsiveness|Responsiveness`</li>
136+
</ul>
137+
</td>
138+
</tr>
139+
<tr>
140+
<td>`Class.AngularVelocity|AngularVelocity`</td>
141+
<td>—</td>
142+
<td>
143+
<ul>
144+
<li>`Class.AngularVelocity.AngularVelocity|AngularVelocity`</li>
145+
<li>`Class.AngularVelocity.MaxTorque|MaxTorque`</li>
146+
</ul>
147+
</td>
148+
</tr>
149+
<tr>
150+
<td>`Class.AnimationConstraint|AnimationConstraint`</td>
151+
<td>`Class.AnimationConstraint.IsKinematic|IsKinematic` = `false`</td>
152+
<td>
153+
<ul>
154+
<li>`Class.AnimationConstraint.MaxForce|MaxForce`</li>
155+
<li>`Class.AnimationConstraint.MaxTorque|MaxTorque`</li>
156+
</ul>
157+
</td>
158+
</tr>
159+
<tr>
160+
<td rowspan="2">`Class.CylindricalConstraint|CylindricalConstraint`</td>
161+
<td>`Class.CylindricalConstraint.ActuatorType|ActuatorType` = `Enum.ActuatorType.Motor|Motor`</td>
162+
<td>
163+
<ul>
164+
<li>`Class.CylindricalConstraint.Velocity|Velocity`</li>
165+
<li>`Class.CylindricalConstraint.MotorMaxAcceleration|MotorMaxAcceleration`</li>
166+
<li>`Class.CylindricalConstraint.MotorMaxForce|MotorMaxForce`</li>
167+
</ul>
168+
</td>
169+
</tr>
170+
<tr>
171+
<td>`Class.CylindricalConstraint.ActuatorType|ActuatorType` = `Enum.ActuatorType.Servo|Servo`</td>
172+
<td>
173+
<ul>
174+
<li>`Class.CylindricalConstraint.Speed|Speed`</li>
175+
<li>`Class.CylindricalConstraint.ServoMaxForce|ServoMaxForce`</li>
176+
<li>`Class.CylindricalConstraint.Responsiveness|Responsiveness`</li>
177+
</ul>
178+
</td>
179+
</tr>
180+
<tr>
181+
<td rowspan="2">`Class.CylindricalConstraint|CylindricalConstraint`</td>
182+
<td>`Class.CylindricalConstraint.AngularActuatorType|AngularActuatorType` = `Enum.ActuatorType.Motor|Motor`</td>
183+
<td>
184+
<ul>
185+
<li>`Class.CylindricalConstraint.AngularVelocity|AngularVelocity`</li>
186+
<li>`Class.CylindricalConstraint.MotorMaxAngularAcceleration|MotorMaxAngularAcceleration`</li>
187+
<li>`Class.CylindricalConstraint.MotorMaxTorque|MotorMaxTorque`</li>
188+
</ul>
189+
</td>
190+
</tr>
191+
<tr>
192+
<td>`Class.CylindricalConstraint.AngularActuatorType|AngularActuatorType` = `Enum.ActuatorType.Servo|Servo`</td>
193+
<td>
194+
<ul>
195+
<li>`Class.CylindricalConstraint.AngularSpeed|AngularSpeed`</li>
196+
<li>`Class.CylindricalConstraint.ServoMaxTorque|ServoMaxTorque`</li>
197+
<li>`Class.CylindricalConstraint.Responsiveness|Responsiveness`</li>
198+
</ul>
199+
</td>
200+
</tr>
201+
<tr>
202+
<td rowspan="2">`Class.HingeConstraint|HingeConstraint`</td>
203+
<td>`Class.HingeConstraint.ActuatorType|ActuatorType` = `Enum.ActuatorType.Motor|Motor`</td>
204+
<td>
205+
<ul>
206+
<li>`Class.HingeConstraint.AngularVelocity|AngularVelocity`</li>
207+
<li>`Class.HingeConstraint.MotorMaxAcceleration|MotorMaxAcceleration`</li>
208+
<li>`Class.HingeConstraint.MotorMaxTorque|MotorMaxTorque`</li>
209+
</ul>
210+
</td>
211+
</tr>
212+
<tr>
213+
<td>`Class.HingeConstraint.ActuatorType|ActuatorType` = `Enum.ActuatorType.Servo|Servo`</td>
214+
<td>
215+
<ul>
216+
<li>`Class.HingeConstraint.AngularSpeed|AngularSpeed`</li>
217+
<li>`Class.HingeConstraint.ServoMaxTorque|ServoMaxTorque`</li>
218+
<li>`Class.HingeConstraint.Responsiveness|Responsiveness`</li>
219+
</ul>
220+
</td>
221+
</tr>
222+
<tr>
223+
<td rowspan="3">`Class.LinearVelocity|LinearVelocity`</td>
224+
<td>`Class.LinearVelocity.VelocityConstraintMode|VelocityConstraintMode` = `Enum.VelocityConstraintMode.Line|Line`</td>
225+
<td>
226+
<ul>
227+
<li>`Class.LinearVelocity.LineVelocity|LineVelocity`</li>
228+
<li>If `Class.LinearVelocity.ForceLimitsEnabled|ForceLimitsEnabled`, also `Class.LinearVelocity.MaxForce|MaxForce`</li>
229+
</ul>
230+
</td>
231+
</tr>
232+
<tr>
233+
<td>`Class.LinearVelocity.VelocityConstraintMode|VelocityConstraintMode` = `Enum.VelocityConstraintMode.Plane|Plane`</td>
234+
<td>
235+
<ul>
236+
<li>`Class.LinearVelocity.PlaneVelocity|PlaneVelocity`</li>
237+
<li>
238+
<span>If `Class.LinearVelocity.ForceLimitsEnabled|ForceLimitsEnabled`:</span>
239+
<ul>
240+
<li>`Enum.ForceLimitMode.Magnitude|Magnitude`: `Class.LinearVelocity.MaxForce|MaxForce`</li>
241+
<li>`Enum.ForceLimitMode.PerAxis|PerAxis`: `Class.LinearVelocity.MaxPlanarAxesForce|MaxPlanarAxesForce`</li>
242+
</ul>
243+
</li>
244+
</ul>
245+
</td>
246+
</tr>
247+
<tr>
248+
<td>`Class.LinearVelocity.VelocityConstraintMode|VelocityConstraintMode` = `Enum.VelocityConstraintMode.Vector|Vector`</td>
249+
<td>
250+
<ul>
251+
<li>`Class.LinearVelocity.VectorVelocity|VectorVelocity`</li>
252+
<li>
253+
<span>If `Class.LinearVelocity.ForceLimitsEnabled|ForceLimitsEnabled`:</span>
254+
<ul>
255+
<li>`Enum.ForceLimitMode.Magnitude|Magnitude`: `Class.LinearVelocity.MaxForce|MaxForce`</li>
256+
<li>`Enum.ForceLimitMode.PerAxis|PerAxis`: `Class.LinearVelocity.MaxAxesForce|MaxAxesForce`</li>
257+
</ul>
258+
</li>
259+
</ul>
260+
</td>
261+
</tr>
262+
<tr>
263+
<td rowspan="2">`Class.PrismaticConstraint|PrismaticConstraint`</td>
264+
<td>`Class.PrismaticConstraint.ActuatorType|ActuatorType` = `Enum.ActuatorType.Motor|Motor`</td>
265+
<td>
266+
<ul>
267+
<li>`Class.PrismaticConstraint.Velocity|Velocity`</li>
268+
<li>`Class.PrismaticConstraint.MotorMaxAcceleration|MotorMaxAcceleration`</li>
269+
<li>`Class.PrismaticConstraint.MotorMaxForce|MotorMaxForce`</li>
270+
</ul>
271+
</td>
272+
</tr>
273+
<tr>
274+
<td>`Class.PrismaticConstraint.ActuatorType|ActuatorType` = `Enum.ActuatorType.Servo|Servo`</td>
275+
<td>
276+
<ul>
277+
<li>`Class.PrismaticConstraint.Speed|Speed`</li>
278+
<li>`Class.PrismaticConstraint.ServoMaxForce|ServoMaxForce`</li>
279+
<li>`Class.PrismaticConstraint.Responsiveness|Responsiveness`</li>
280+
</ul>
281+
</td>
282+
</tr>
283+
<tr>
284+
<td>`Class.RopeConstraint|RopeConstraint`</td>
285+
<td>`Class.RopeConstraint.WinchEnabled|WinchEnabled` = `true`</td>
286+
<td>
287+
<ul>
288+
<li>`Class.RopeConstraint.WinchForce|WinchForce`</li>
289+
<li>`Class.RopeConstraint.WinchSpeed|WinchSpeed`</li>
290+
</ul>
291+
</td>
292+
</tr>
293+
</tbody>
294+
</table>
295+
103296
## Additional wake situations
104297

105298
In addition to situations outlined in [sleep‑checking](#sleep-checking) and [sleeping](#sleeping), an assembly enters the [awake](#awake) state when:

0 commit comments

Comments
 (0)