【2026年9月最新】UnityのRigidbodyとは?物理演算でボールを弾ませる使い方をパラメーター解説付きで初心者にもわかりやすく紹介
「ボールを転がしたい」「箱を積み上げて崩したい」「キャラクターを重力で落下させたい」——Unityでこうした物理的な動きを実現したいとき、最初に触ることになるコンポーネントがRigidbody(リジッドボディ)です。
Rigidbodyは、Unity初心者が最初につまずきやすいポイントの一つでもあります。「つけただけで思った通りに動かない」「跳ねてほしいのに跳ねない」「スクリプトで動かそうとしたら変な挙動になった」——こうした悩みの多くは、Rigidbodyのパラメーターと、物理演算の基本的な考え方を知らないまま使っていることが原因です。
この記事では、Rigidbodyの基礎から、ボールを弾ませる実践例、各パラメーターの意味、スクリプトからの正しい操作方法までを、非エンジニアの方にもわかりやすく解説します。後半では、Claude Codeを使ってUnityの物理演算コードを効率的に書く方法まで紹介します。
この記事で得られる知識:
01 WHAT IS IT Rigidbodyとは何か:物理演算の基礎 オブジェクトに「重さ」と「物理法則」を与えるコンポーネント
Rigidbodyは、Unityのオブジェクトに重力・力・衝突の反応といった現実世界の物理法則を適用するためのコンポーネントです。何もつけていないオブジェクトは、スクリプトで座標を指定しない限り宙に浮いたまま静止し続けますが、Rigidbodyを追加すると、Unity内蔵の物理演算エンジンがそのオブジェクトの動きを自動的に計算するようになります。
📚 用語解説
物理演算エンジン:ゲームエンジンに組み込まれている、重力・衝突・摩擦などの物理法則をリアルタイムで計算する仕組み。Unityでは「PhysX」という物理演算エンジンが標準搭載されており、Rigidbodyコンポーネントを通じてこの機能を利用する。
📚 用語解説
Rigidbody(リジッドボディ):直訳すると「剛体」。Unityでオブジェクトに物理法則(重力・力・衝突反応)を適用するためのコンポーネント。Rigidbodyをアタッチしたオブジェクトは、物理演算エンジンによって毎フレーム自動的に位置や回転が更新されるようになる。
重要な考え方として、Rigidbodyをつけたオブジェクトは、原則として「transform.positionを直接書き換えて動かす」のではなく、「力(Force)や速度(Velocity)を与えて物理演算エンジンに動かしてもらう」という発想に切り替える必要があります。この発想の違いが、Rigidbody初心者がつまずく最大のポイントです。
Rigidbodyをつけていない状態は「指示書どおりにしか動かない担当者」、Rigidbodyをつけた状態は「重力や周囲の状況を自分で判断して動く担当者」に近いイメージです。細かい座標を逐一指定しなくても、物理法則という「共通ルール」に従って自然に振る舞ってくれます。
02 GETTING STARTED Rigidbodyを使ってみよう:ボールを弾ませるまでの手順 実際に手を動かして物理演算を体感する
まずは実際に、ボールを高いところから落として、地面で弾ませるところまでを手順で見ていきます。
2-1. オブジェクトを配置する
Hierarchyウィンドウで右クリックし、3D Object → Sphereでボールを、3D Object → Planeで地面を作成します。ボールの位置(Position)を地面より高い場所(例:Y=5)に設定しておきます。
2-2. Rigidbodyをアタッチする
ボールのオブジェクトを選択し、InspectorウィンドウのAdd Componentから「Rigidbody」を検索してアタッチします。これだけで、ボールは物理演算エンジンの管理下に入ります。
この状態で再生すると、ボールは重力に従って落下し、地面(Plane)に衝突して止まります。ただし、まだ「跳ねる」動きにはなりません。これは初期状態では地面・ボールともに反発係数(弾む強さ)が0に設定されているためです。
配置
高い位置に
ボールを置く
アタッチ
Add Componentで
追加
落下を確認
重力で
落ちるだけ
弾ませる
Bouncinessを
設定
2-3. ボールが跳ねるようにする
ボールを弾ませるには、Physic Material(物理マテリアル)という設定を作成し、反発係数(Bounciness)を設定する必要があります。手順は次章のPhysic Material解説で詳しく扱いますが、先に結果だけ示すと、Bouncinessを0.8前後に設定したPhysic Materialをボールに割り当てることで、地面に当たるたびに弾む動きが実現します。
03 PARAMETERS Rigidbodyの主要パラメーターを理解する Mass・Drag・Is Kinematicなど、設定項目ごとの役割
Rigidbodyコンポーネントには複数の設定項目があります。全てを一度に覚える必要はありませんが、代表的なものを整理しておきます。
| パラメーター | 役割 | 実務での使いどころ |
|---|---|---|
| Mass(質量) | オブジェクトの重さ。力を受けたときの動きやすさに影響 | 重いオブジェクトほど同じ力でも動きにくくしたいとき |
| Drag(抵抗) | 移動速度を徐々に減衰させる空気抵抗のような効果 | ふわっと減速させたい・滑り続けさせたくないとき |
| Angular Drag(回転抵抗) | 回転速度を徐々に減衰させる抵抗 | 回転がいつまでも止まらないのを防ぎたいとき |
| Use Gravity | 重力の影響を受けるかどうか | 宇宙空間や浮遊オブジェクトなど、重力を無効化したいとき |
| Is Kinematic | ONにすると物理演算による力を受けなくなる(自分で位置を制御) | スクリプトで完全に制御したい・アニメーションで動かしたいとき |
| Interpolate | 物理演算のカクつきを見た目上滑らかにする補正 | 高速な物体の動きがカクカクして見えるとき |
| Collision Detection | 衝突判定の精度モード(Discrete/Continuous等) | 高速で移動する物体がすり抜けてしまうとき |
| Constraints | 特定の位置・回転軸を固定する | 倒れてほしくない・特定方向にしか動いてほしくないとき |
📚 用語解説
Is Kinematic(イズ・キネマティック):ONにすると、そのRigidbodyは重力や他のオブジェクトからの力を受けなくなり、衝突判定は保持したまま、スクリプトやアニメーションで位置を直接制御するモードになる。「物理法則に従わせたいか、自分で完全に制御したいか」を切り替えるスイッチと考えるとよい。
3-1. Is Kinematicはいつ使うのか
Is Kinematicは「物理演算に任せず、自分でコントロールしたい」場合に使います。典型例は、決まったルートを移動するエレベーターや、アニメーションで動かすドアなど「動きが決まっている」オブジェクトです。これらは重力に落とされたり、ぶつかった衝撃で吹き飛んだりしては困るため、Is KinematicをONにして、スクリプトやアニメーションで位置を管理します。
3-2. Collision Detectionで「すり抜け」を防ぐ
高速で移動する小さなオブジェクト(弾丸など)は、1フレームの間に壁を通り過ぎてしまい、衝突判定が起きない「すり抜け」現象が発生することがあります。Collision Detectionを既定の「Discrete」から「Continuous」や「Continuous Dynamic」に変更すると、この問題を軽減できます。
Continuous系のCollision Detectionは衝突判定の精度が上がる代わりに処理負荷も増えます。すべてのオブジェクトに一律で設定するのではなく、すり抜けが実際に問題になっている高速オブジェクトだけに絞って設定するのが基本です。
04 PHYSIC MATERIAL Physic Materialで摩擦・跳ね返りを設定する ボールを弾ませる・滑らせないための設定
前の章で触れた「ボールを弾ませる」設定を担当するのがPhysic Material(物理マテリアル)です。RigidbodyがOnとOffだけの「参加スイッチ」だとすれば、Physic Materialはそのオブジェクトの「材質の性質(滑りやすさ・弾みやすさ)」を定義するものです。
📚 用語解説
Physic Material(フィジックマテリアル):Unityのオブジェクトの「摩擦のしやすさ」「跳ね返りやすさ」を定義する素材データ。Projectウィンドウで新規作成し、Colliderコンポーネントの「Material」欄に割り当てることで、そのオブジェクトの衝突時の挙動を変更できる。
| パラメーター | 役割 |
|---|---|
| Dynamic Friction | 既に動いている状態での摩擦の強さ(滑りにくさ) |
| Static Friction | 静止状態から動き出すために必要な摩擦の強さ |
| Bounciness | 跳ね返りの強さ。0で跳ねない、1に近いほどよく跳ねる |
| Friction Combine | 2つのオブジェクトの摩擦値をどう組み合わせるか(平均・最小・最大・乗算) |
| Bounce Combine | 2つのオブジェクトの反発係数をどう組み合わせるか(平均・最小・最大・乗算) |
ボールを弾ませたい場合、Projectウィンドウで右クリックしCreate → Physic Materialで新規作成し、Bouncinessを0.8前後に設定します。作成したPhysic Materialを、ボールのSphere Colliderの「Material」欄にドラッグ&ドロップすれば設定完了です。
ボールだけでなく地面側にもPhysic Materialを設定し、Bounce Combineを「Maximum」にしておくと、どちらか一方が高い反発係数を持っていれば跳ねる、という直感的な挙動になります。
05 SCRIPTING スクリプトからRigidbodyを操作する AddForce・MovePositionを使った正しい動かし方
Rigidbodyをつけたオブジェクトを、プレイヤーの入力やゲームロジックで動かしたい場合、transform.positionを直接書き換えるのは避けるべきです。物理演算エンジンと座標の管理が競合し、衝突判定がおかしくなったり、めり込みが発生したりする原因になります。正しくはAddForceやMovePositionといった、Rigidbody専用のメソッドを使います。
5-1. AddForceで力を加える
using UnityEngine;
public class BallLauncher : MonoBehaviour
{
public float launchPower = 5f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// 上方向に力を瞬間的に加える(ジャンプのような動き)
rb.AddForce(Vector3.up * launchPower, ForceMode.Impulse);
}
}
}
AddForceは名前のとおり「力を加える」メソッドです。第二引数のForceModeによって力の伝わり方が変わります。
| ForceMode | 意味 | 使いどころ |
|---|---|---|
| Force | 継続的にじわじわ力を加える(Massの影響を受ける) | エンジンの推進力・風の影響など |
| Impulse | 瞬間的に強い力を加える(Massの影響を受ける) | ジャンプ・爆発の吹き飛ばしなど |
| Acceleration | 継続的な力(Massを無視) | 全オブジェクトに同じ加速度をかけたいとき |
| VelocityChange | 瞬間的な速度変化(Massを無視) | 重さに関係なく同じ初速を与えたいとき |
📚 用語解説
ForceMode:AddForceで力を加える際の「力の伝わり方」を指定する設定。Force/Impulseは質量(Mass)の影響を受け、重いオブジェクトほど動きにくくなる。Acceleration/VelocityChangeは質量の影響を受けず、どのオブジェクトにも同じ加速・速度変化を与える。
5-2. MovePositionで位置を直接指定する
「力を加える」のではなく「特定の位置まで移動させたい」場合は、Rigidbody.MovePositionを使います。transform.positionの直接書き換えと違い、物理演算エンジンに正しく認識された上での移動になるため、衝突判定の不整合が起きません。
using UnityEngine;
public class RigidbodyMover : MonoBehaviour
{
public float speed = 3f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// 入力に応じてRigidbody経由で移動する
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 moveDir = new Vector3(h, 0, v) * speed * Time.fixedDeltaTime;
rb.MovePosition(rb.position + moveDir);
}
}
Update()は描画フレームごとに呼ばれ、実行間隔は端末の性能によって変動します。一方、物理演算エンジンは一定間隔(既定0.02秒)で動作するため、AddForceやMovePositionなどRigidbody関連の処理はUpdate()ではなくFixedUpdate()に書くのが正しい書き方です。Update()に書くと、フレームレートによって物理挙動がぶれる原因になります。
5-3. 速度を直接指定する
現在の速度そのものを書き換えたい場合は、速度プロパティに直接値を代入します。近年のUnityではRigidbody.linearVelocityという名称が使われており(旧バージョンではvelocityという名称でした)、使い方自体は同じです。
using UnityEngine;
public class VelocitySetter : MonoBehaviour
{
public float jumpSpeed = 8f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Jump()
{
// Y方向の速度だけを瞬時に置き換える(ジャンプの定番実装)
Vector3 v = rb.linearVelocity;
v.y = jumpSpeed;
rb.linearVelocity = v;
}
}
ジャンプの実装は「AddForce(ForceMode.Impulse)」と「velocity(linearVelocity)への直接代入」のどちらでも実現できます。Massによる重さの違いを反映したいならAddForce、常に同じ高さで安定してジャンプさせたいならvelocity直接指定が向いています。
06 PITFALLS よくある失敗・落とし穴と対処法 Rigidbodyで詰まりやすいポイントを先回りで解説
Rigidbodyを使い始めたときによくある失敗パターンと、その原因・解決策を整理します。
失敗1:重力はかかるのに跳ねない
前述のとおり、Rigidbody単体には「跳ね返り」の設定はありません。Physic Materialを作成し、Bouncinessを設定していないと、ボールは地面に当たった瞬間に静止します。
失敗2:Update()でtransform.positionを直接動かしてしまう
// NG例:物理演算と衝突する書き方
void Update()
{
transform.position += Vector3.forward * speed * Time.deltaTime;
}
// OK例:Rigidbody経由でFixedUpdate内で移動
void FixedUpdate()
{
rb.MovePosition(rb.position + Vector3.forward * speed * Time.fixedDeltaTime);
}
Rigidbodyがついたオブジェクトのtransform.positionを直接書き換えると、物理演算エンジンが管理する位置情報と矛盾が生じ、衝突判定の見落とし・オブジェクトのめり込みといった不具合の原因になります。
失敗3:Is Kinematicのつけ忘れ・つけすぎ
動きを完全にスクリプト制御したいオブジェクト(エレベーター等)でIs KinematicをOFFのままにしておくと、重力で落下してしまいます。逆に、物理法則どおりに動いてほしいボールなどにIs KinematicをONにしてしまうと、重力も衝突の反発力も一切効かなくなり、「Rigidbodyをつけたのに全く動かない」という状態になります。
テンプレートやアセットをコピーして使う際、意図せずIs KinematicがONになっているケースがあります。「Rigidbodyをつけたのに一切動かない」と感じたら、まずInspectorでIs Kinematicのチェックを確認してください。
07 CLAUDE CODE × UNITY Claude CodeでUnityの物理演算コードを効率化する方法 AI鬼管理の実践:Unity開発でClaude Codeを使う
ここからが弊社GENAIの実践です。Claude CodeをUnity開発に組み込むと、Rigidbodyを使った物理演算コードを書く時間を大幅に削減できます。具体的な活用方法を紹介します。
言語化する
「ボールを
ジャンプさせたい」
コードを依頼
「Unity C#で
AddForceを使って」
確認・修正
パラメータ調整
エラー修正
貼り付け
アタッチして
動作確認
追加で依頼
「もっと弾ませたい」
「摩擦を強く」
7-1. Claude Codeへの効果的なプロンプト例
Claude CodeにUnityの物理演算コードを依頼する際、以下のようなプロンプトが効果的です。
| やりたいこと | Claude Codeへのプロンプト例 |
|---|---|
| ジャンプ処理 | 「Unity C#でRigidbodyを使ったジャンプスクリプトを書いて。AddForce(ForceMode.Impulse)を使い、地面に接地しているときだけジャンプできるようにして」 |
| ボールを弾ませる | 「UnityでPhysic Materialを使ってボールを弾ませたい。BouncinessとBounce Combineの推奨設定値を教えて」 |
| プレイヤー移動 | 「Unity C#でRigidbody.MovePositionを使ったプレイヤー移動スクリプトを、FixedUpdate内で書いて」 |
| すり抜け対策 | 「高速で動く弾丸オブジェクトが壁をすり抜けてしまいます。Collision Detectionの設定とスクリプト側の対策を教えて」 |
重要なのは「AddForceかMovePositionか」「どのForceModeを使いたいか」「Update/FixedUpdateどちらに書くか」を明示することです。これらを具体的に書くと、そのまま動くコードが1回のやり取りで出てくることがほとんどです。
7-2. バグ修正・最適化もClaude Codeで
既存のRigidbodyコードに問題が出たときも、コードをClaude Codeに貼り付けて「ボールが壁にめり込む問題が起きています。原因と修正方法を教えて」と聞くだけで、問題点の説明と修正コードが得られます。
弊社GENAIでのUnity案件では、Claude Codeの活用でコード作成・デバッグにかかる時間を50〜70%削減できています。特に「典型的なパターンのコード(ジャンプ・弾ませる・移動)」はClaude Codeが非常に得意とする領域で、ほぼ完成形のコードが出力されます。
経営者・プランナー・デザイナーが「こういう動きを実装してほしい」という要望をClaude Codeに伝え、出力されたコードをエンジニアが確認・調整するというワークフローも実現できます。Claude Codeが「要件をコードに翻訳する中間役」になることで、技術的なコミュニケーションのハードルが下がります。
08 CONCLUSION まとめ:Rigidbodyを使いこなして物理演算をマスターする 使い分けの基本ルールと、AI時代の開発効率化の実践
この記事では、Unityの Rigidbody について、基礎・実践手順・パラメーター・Physic Material・スクリプト操作・よくある失敗・Claude Code活用まで解説しました。最後に要点を振り返ります。
「重力で落ちる」「弾む」「摩擦で滑らない」という基本の3点を押さえておけば、Rigidbodyの9割のユースケースには対応できます。残りの1割(複雑な物理挙動や特殊な演出)は、Claude Codeに要件を伝えて最適なコードを生成してもらうアプローチが効率的です。
Unity開発・ゲーム制作のAI活用を一緒に設計します
Claude Codeを使ったUnity開発の効率化・AI機能の組み込み・業務ゲームの制作支援まで、
弊社のAI鬼管理サービスで幅広くご支援します。
ここから先の進め方は、大きく2つあります。
自社で回せるようになりたい方は、AI鬼管理でClaude Code/Codexの使い方から業務設計・社内定着まで伴走を受けながら、社内に仕組みを作る道があります。
覚えるより任せたい方は、AI社員AIKATAでこの記事のような定型業務を丸ごと預ける道があります。料金は月30万円の月額定額、追加費用は0円です。
どちらが合うかは、業務量と社内体制次第です。無料相談・無料適合診断で、貴社の場合はどちらが向くかからご相談いただけます。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
よくある質問
Q. Rigidbodyをつけたのに、オブジェクトが全く動きません
A. Is Kinematicが誤ってONになっていないか確認してください。ONの場合、重力や衝突による力を受けなくなり、スクリプトやアニメーションで明示的に動かさない限り静止したままになります。
Q. ボールが地面に落ちても跳ねません。どこを設定すればいいですか?
A. 跳ね返りはRigidbody本体ではなく、Physic Materialという別の設定で制御します。Physic Materialを新規作成し、BouncinessをOn 0.8前後に設定した上で、ボールのColliderのMaterial欄に割り当ててください。
Q. AddForceとMovePosition、どちらを使えばいいですか?
A. 「力を加えて自然な物理挙動をさせたい」場合はAddForce、「特定の位置まで正確に移動させたい」場合はMovePositionが向いています。ジャンプや爆発の吹き飛ばしはAddForce、決まったルートでの移動制御はMovePositionが定番です。
Q. 物理演算のコードはUpdateとFixedUpdate、どちらに書くべきですか?
A. Rigidbody関連の処理(AddForce・MovePosition・velocityの変更など)は、必ずFixedUpdate()に書いてください。物理演算エンジンは一定間隔で動作するため、フレームレートに依存するUpdate()に書くと挙動がぶれる原因になります。
Q. RigidbodyのvelocityとlinearVelocityの違いは何ですか?
A. 近年のUnityでは、Rigidbodyの速度を表すプロパティ名がvelocityからlinearVelocityに変更されています。役割自体は同じで、現在の速度を直接取得・設定するためのプロパティです。使用しているUnityのバージョンに合わせて表記を選んでください。
Q. Claude CodeでUnityの物理演算を効率化するには何を伝えればいいですか?
A. 「Unity C#で○○を実現するスクリプトを書いて」という指示に加え、「AddForceかMovePositionか」「使いたいForceMode」「Update/FixedUpdateどちらに書くか」を明記すると、そのまま使えるコードが出力されやすいです。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
AI鬼管理/AI社員AIKATAへのお問い合わせ
この記事を読んで気になった方へ。
専門スタッフが、御社に最適な
業務自動化・業務代行プランを無料でご提案します。




