mcpField
R
roblox-physics

roblox-physics

github.com/nonlooped開発25343 回インストール2 週間前に更新
リポジトリ

roblox-physics について

roblox-physicsは、アセンブリ、拘束、衝突、ネットワーク所有権を扱うRoblox開発者向けの物理リファレンススキルです。問題の調査や性能調整、サンプルスクリプトについても説明します。

主な機能

  1. 01アセンブリとアンカーの方針
  2. 02機械拘束とムーバー拘束
  3. 03衝突フィルターの設定
  4. 04ネットワーク所有権とセキュリティ
  5. 05物理ステップとスリープの調整
  6. 06車両・ドア・プラットフォームの例

活用シーン

  1. 01車両、ドア、サスペンション機構の構築
  2. 02BodyMoverコードの最新拘束への移行
  3. 03マルチプレイヤーでの物理遅延の調査
  4. 04物理性能とスリープ状態の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nonlooped/roblox-suite --skill roblox-physics

インストール後、Claude Code で/roblox-physicsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
collisions-and-filtering.md
mechanical-constraints.md
mover-constraints.md
network-ownership.md
units-and-physical-properties.md
scripts/
DoorHinge.lua
PlatformMover.lua
Suspension.lua
VehicleController.lua

詳細

roblox-physics

公式ソース:

パーツ同士を接続するにはメカニカル制約を使用し、力や速度の目標値を適用するにはムーバー制約を使用します。古いコードには、以下の BodyMover 移行表を使用してください。

コアコンセプト

アセンブリ

アセンブリとは、剛体溶接または可動ジョイントで接続され、単一の剛体としてシミュレーションされる1つ以上のパーツです。

主な BasePart プロパティ(アセンブリ内のすべてのパーツで共通):

  • AssemblyLinearVelocity / AssemblyAngularVelocity:現実的な動きには、直接代入するよりも制約または ApplyImpulse を使用してください。
  • AssemblyCenterOfMass:ここに力を加えると、純粋な線形加速度が発生します。
  • AssemblyMass:すべてのパーツの質量の合計です。パーツが1つでも固定されている場合は無限になります。
  • AssemblyRootPart:レプリケーションとネットワーク所有権のために、自動的に選択されるルートです。

ルートパーツの優先順位:固定されているパーツ > 質量なしではないパーツ > より高い RootPriority > サイズ/名前による判断基準。

固定
  • アセンブリ内のパーツを1つ固定すると、そのパーツがルートになり、残りのパーツも暗黙的に固定されます。
  • 同じアセンブリ内の複数のパーツを固定すると、アセンブリが分割されます。
  • アセンブリ全体を固定するには、ルートパーツのみを固定してください。
衝突フィルタリング

パーツ同士のフィルタリングには、衝突グループ(Workspace:RegisterCollisionGroup(WorldRoot から継承)、BasePart.CollisionGroup)または NoCollisionConstraint を使用します。CanCollide、CanTouch、CanQuery はそれぞれ異なる動作を制御します。詳しくは references/collisions-and-filtering.md を参照してください。

メカニカル制約

WeldConstraint と NoCollisionConstraint は Part0/Part1 を使用し、それ以外のすべてのメカニカル制約は1つまたは2つの Attachment(または Bone)を接続します。

制約用途
WeldConstraint2つのパーツを同じ相対位置・姿勢で剛体的に固定します
RigidConstraintWeldConstraint と同様ですが、Attachment ベースで、ボーンをサポートします
HingeConstraintドア、レバー、回転パーツ。モーター/サーボは任意です
PrismaticConstraint引き戸、エレベーター、ピストン
CylindricalConstraint油圧ラムや着陸装置のように、スライドと回転を行います
SpringConstraintスプリング、ショック、サスペンション
TorsionSpringConstraint回転スプリング
BallSocketConstraint肩、ボールジョイント
UniversalConstraintドライブシャフト、等速ジョイント
RopeConstraintケーブル、ウインチ、最大長
RodConstraint距離を一定に保ちます
PlaneConstraint運動を平面上に制限します
NoCollisionConstraint特定の2つのパーツ間の衝突を無効にします

作成方法、向き、モーター/サーボの調整、制限については references/mechanical-constraints.md を参照してください。

Mover 制約

非推奨の BodyMover に代わる、最新の制約です。

旧式最新用途
BodyPositionAlignPositionアタッチメントを位置、または別のアタッチメントへ移動させます
BodyGyroAlignOrientation向きを合わせます。追跡には LookAtPosition を使用します
BodyVelocityLinearVelocityベクトル、直線、平面に沿って一定の速度を維持します
BodyAngularVelocityAngularVelocity一定の角速度を維持します
BodyForce/BodyThrustVectorForce一定の力を加えます
RocketPropulsionLineForce + AlignOrientationターゲットを追従し、向きを合わせます
-Torque一定のトルクを加えます
-LineForce2つのアタッチメント間の直線に沿って力を加えます
-AnimationConstraintアニメーション/トランスフォームで駆動される制約です

力のモード(Magnitude と PerAxis)、相対性フレーム、剛性、反力については、references/mover-constraints.md を参照してください。

ネットワーク所有権

  • アンカーされたパーツはサーバーが所有します。
  • プレイヤーキャラクターの近くにあるアンカーされていないパーツは、そのクライアントが自動的に所有します。
  • BasePart:SetNetworkOwner(player) を使って所有権を明示的に設定します(サーバーのみ)。SetNetworkOwnershipAuto() でリセットします。
  • 車両/ドライバーの所有権は慎重に割り当ててください。そうしないと、最初に着席したプレイヤーがアセンブリ全体を所有する場合があります。

セキュリティ: クライアントは所有するパーツを悪用できます(テレポート、偽の衝突など)。ゲームプレイ上重要なイベントはサーバー側で検証してください。references/network-ownership.md を参照してください。

スリープシステム

アセンブリはパフォーマンスを節約するため、静止するとシミュレーションを停止します。衝突、プロパティの変更、インパルス、重力/風の変化によって再び動作します。

  • 低速の機構がスリープ状態になる場合は、動きを大きくするか、より厳しいスリープしきい値が設定された駆動ジョイント(モーター/サーボ制約)を使用してください。
  • Studio の可視化オプションにある Awake parts を使って、スリープ状態を可視化できます。

物理ステップ方式

Workspace.PhysicsSteppingMethod:

  • Fixed(デフォルト、240 Hz):一般的に最適な選択肢です。レース、破壊、戦車、または大半のパーツがすでに 240 Hz で解決される場合に使用します。
  • Adaptive:アセンブリを 60/120/240 Hz のアイランドに割り当て、適切なエクスペリエンスでは最大約 2.5 倍のパフォーマンスを実現します。

MicroProfiler を使ってアイランドの分布を確認してください。

単位の早見表

Robloxメートル法
1 stud28 cm
1 RMU21.952 kg
196.2 studs/s²デフォルトの「Classic」重力
35 studs/s²「Realistic」重力(≈ 9.8 m/s²)

references/units-and-physical-properties.md を参照してください。

よくある間違い

  • 最新の制約ではなく、非推奨の BodyMover を使う。
  • 力/制約を使わず、毎フレーム CFrame を設定する。
  • アセンブリ内のすべてのパーツをアンカーし、分割してパフォーマンスを低下させる。
  • 車両のネットワーク所有権を無視し、入力の遅延に悩まされる。
  • ダメージ/権限判定に、クライアント所有パーツからの Touched イベントを信頼する。
  • 駆動ジョイントが早期にスリープ状態になるのを放置する。

スクリプト

  • scripts/VehicleController.lua:HingeConstraint によるステアリングとモーター駆動を備え、クライアント所有権とサーバー検証を行うシャーシ設定です。
  • scripts/DoorHinge.lua:制限と状態マシンを備えた、モーター駆動/サーボ駆動のドアです。
  • scripts/PlatformMover.lua:設定可能なウェイポイントを備えた、AlignPosition + AlignOrientation によるプラットフォームです。
  • scripts/Suspension.lua:SpringConstraint を使ったスプリング・ダンパー式サスペンションです。

進め方

  1. オブジェクトが剛体機構(機械制約)か、力駆動(Mover 制約)かを判断します。
  2. アセンブリ、ルートパーツ、アンカー方式を計画します。
  3. マルチプレイヤーでの応答性を高めるため、ネットワーク所有権を設定します。
  4. 単位と物理特性を使って、力/速度を調整します。
  5. MicroProfiler でプロファイルし、スリープ状態/所有権の可視化を確認します。

リファレンス一覧

  • collisions-and-filtering.md:衝突グループ、タッチイベント、または空間クエリフィルターを設定します。
  • mechanical-constraints.md:ヒンジ、スプリング、ロープ、またはその他の機械的制約でパーツを接続します。
  • mover-constraints.md:力や速度の目標値を適用するか、BodyMover コードを移行します。
  • network-ownership.md:物理シミュレーションをサーバーまたはプレイヤーに割り当て、所有権をデバッグします。
  • units-and-physical-properties.md:質量、密度、摩擦、力、またはシミュレーションのステップ間隔を調整します。

コメント