表示テーマ
Rigidbody Component
3D物体の重力・速度・力・接触応答を制御します。
設定する手順
- Collisionを設定し、Dynamic/Kinematic/Staticと質量を選びます。
- SceneViewまたはGameViewで結果を確認します。
- 編集中のSceneまたはPrefabを保存します。
項目の説明
| 項目 | C#名 | 型 | 操作 | 定義時の初期値 | 意味 |
|---|---|---|---|---|---|
| BodyType | BodyType | RigidbodyType | 読取・変更 | RigidbodyType::Dynamic | Dynamicは物理で動き、Kinematicはゲーム処理、Staticは固定物として扱います。 |
| CollisionDetection | CollisionDetection | CollisionDetectionMode | 読取・変更 | CollisionDetectionMode::Discrete | 接触を検出する方式です。 |
| 質量 | Mass | float | 読取・変更 | 1.0f | 質量です。Dynamicの力に対する動き方に影響します。 |
| 重力を使う | UseGravity | bool | 読取・変更 | true | 重力を受けるかを指定します。 |
| 重力倍率 | GravityScale | float | 読取・変更 | 1.0f | 重力へ掛ける倍率です。 |
| 速度減衰 | LinearDamping | float | 読取・変更 | 0.0f | 並進速度の減衰です。 |
| はね返り率 | Restitution | float | 読取・変更 | 0.0f | 跳ね返りの強さです。 |
| 摩擦の強さ | Friction | float | 読取・変更 | 0.4f | 接触面での摩擦です。 |
| 角速度減衰 | AngularDamping | float | 読取・変更 | 0.05f | 回転速度の減衰です。 |
| X位置を固定 | FreezePositionX | bool | 読取・変更 | false | X方向の移動を固定します。 |
| Y位置を固定 | FreezePositionY | bool | 読取・変更 | false | Y方向の移動を固定します。 |
| Z位置を固定 | FreezePositionZ | bool | 読取・変更 | false | Z方向の移動を固定します。 |
| 支点が外れたら倒れる | AllowTopple | bool | 読取・変更 | false | 物体が倒れる回転を許可します。 |
| 初速度 | LinearVelocity | Vector3 | 読取・変更 | Vector3::AnyInit(0.0f) | 現在の並進速度です。 |
| AngularVelocity | AngularVelocity | Vector3 | 読取・変更 | Vector3::AnyInit(0.0f) | 現在の回転速度です。 |
| AccumulatedForce | AccumulatedForce | Vector3 | 読取・変更 | Vector3::AnyInit(0.0f) | 次の物理更新へ渡す累積力です。 |
| AccumulatedTorque | AccumulatedTorque | Vector3 | 読取・変更 | Vector3::AnyInit(0.0f) | 次の物理更新へ渡す累積トルクです。 |
Inspectorの設定と使い方
「Editor / C#」は両方から変更できる設定、「Editorのみ」は公開C# APIのない編集操作です。「Editor表示のみ」は計算結果や統計などの確認欄です。「C#のみ」は、このInspectorに編集欄のない操作です。
| 設定・操作 | 編集場所 | C#の入口 | 意味・使い方 |
|---|---|---|---|
| 種別・衝突検出 | Editor / C# | BodyType / CollisionDetection | Dynamicは物理で動く物体、Kinematicはゲーム処理で動かす物体、Staticは固定物向けです。Discreteは通常の離散判定、Continuousは高速移動時のすり抜けを抑えるための方式です。Collisionの3D形状も必要です。 |
| 質量・重力・速度減衰 | Editor / C# | Mass / UseGravity / GravityScale / LinearDamping / AngularDamping | 質量と重力倍率、移動・回転の減衰を指定します。減衰を大きくすると速度が落ちやすくなります。固定更新で力を加え、描画frameごとにTransformで結果を上書きしないようにします。 |
| 摩擦・はね返り・初速度 | Editor / C# | Friction / Restitution / LinearVelocity | 接触時の滑りやすさ、跳ね方、初期の移動速度です。Frictionは描画MaterialのRoughnessとは別の物理値です。 |
| 位置固定・倒れ方 | Editor / C# | FreezePositionX / FreezePositionY / FreezePositionZ / AllowTopple | 移動させたくない軸を固定します。AllowToppleは支点が外れた場合の倒れ方の指定です。全軸固定とStatic/Kinematicの目的を混同しないでください。 |
| 力・トルク | C#のみ | AddForce / AddTorque / AngularVelocity | Forceは継続した力、Impulseは一度の衝撃などに使います。入力をUpdateで受け、FixedUpdateへ要求を渡すと、描画FPSに応じた入力の取りこぼしを避けられます。 |
初期値はEngineのComponent定義時の値で、C++表記を含みます。C#へ貼り付ける実行例ではありません。既存Sceneの保存値や既定Assetがある場合はそちらが優先されます。数値の編集範囲はInspectorで制限される場合があります。
C#から使う
操作型はRigidbodyです。 GameObjectから取得する基本操作はGameObjectの操作を参照してください。以下には基本プロパティだけでなく、公開関数・追加の設定API・継承した共通操作も掲載します。
実用例:キー入力を固定更新へ渡して衝撃を加える
RigidbodyをDynamicにし、3DのCollisionを用意します。この例は衝撃の加え方です。連続ジャンプを制限する接地判定はゲーム側へ追加します。
cs
using NEMEngine;
public sealed class PhysicsJump : MonoBehaviour {
[SerializeField, Min(0.0f)] private float jumpImpulse = 5.0f;
private Rigidbody? body;
private bool jumpRequested;
void Start() {
// 物理更新で使う参照を保持
body = GetComponent<Rigidbody>();
}
void Update() {
// 短いキー入力を次の固定更新まで保持
if (Input.GetKeyDown(KeyCode.Space)) jumpRequested = true;
}
void FixedUpdate() {
// 1回の入力につき1回だけ上向きの衝撃を加える
if (!jumpRequested || body == null) return;
jumpRequested = false;
body.AddForce(new Vector3(0.0f, jumpImpulse, 0.0f), ForceMode.Impulse);
}
}選択値(Enum)
| 型・各値の詳説 | 使える値 |
|---|---|
| CollisionDetectionMode | Continuous / Discrete |
| ForceMode | Acceleration / Force / Impulse / VelocityChange |
| RigidbodyType | Dynamic / Kinematic / Static |
Rigidbody
継承する共通操作:Component
継承する共通操作:Object
使用時の注意
物理で動かす物体はFixedUpdateで力や速度を変更します。Transformを毎frame強制設定すると物理結果と競合します。
Play中の変更は実行用Worldへ反映します。Scene編集のUndoと実行中の値の変更は別です。保存方法は編集と実行時変更を参照してください。