はじめに
Rigidbodyをつけたのに動かない。AddForceを書いたのに全然効かない。
Unityで物理を触り始めると、こういう「思った通りに動かない問題」に一度はぶつかります。
例えばこんな状況、心当たりありませんか?
・ジャンプさせたいのにピクリとも動かない
・落ちるはずなのにふわ〜っと遅い
・ぶつかっても跳ね返らない
・昨日まで動いてたのに急におかしくなった
私も最初の頃は「コード間違えたかな?」とずっとスクリプトを見直していました。
でも実際は、原因のほとんどが設定ミスか仕組みの理解不足だったんですよね。
Unityの物理は少しクセがあって、
・どのタイミングで処理するか
・どのコンポーネントが影響するか
・どこまでが“正常な挙動”なのか
このあたりを知らないと、一気にハマります。
逆に言えば、見るポイントさえ分かっていれば、かなりの確率で短時間で直せます🙂
ここでは、Rigidbodyが思った通りに動かないときに「どこを見ればいいのか」を順番に整理していきます。
チェックリストのように使える内容なので、詰まったときにそのまま確認してみてください。
結論:まず最初に確認すべき5つのポイント
- isKinematicがONになっていないか
- FixedUpdateで処理しているか
- Constraintsで軸が固定されていないか
- Colliderが正しく設定されているか
- オブジェクトのスケールが極端でないか
この5つは、Rigidbodyが動かない原因の中でも特に多いポイントです。
体感ですが、ここを確認するだけでほとんどのケースは解決します。
「コードが間違っている気がする…」と思ったときほど、実は設定の見落としが多いんですよね。
私もデバッグで30分悩んだあと、isKinematicのチェック1つで解決したことが何度もあります…😇
なのでまずは焦ってコードをいじる前に、この5つを上から順番にチェックしてみてください。
それだけで原因がスッと見つかることが多いです。
基礎からしっかり理解しておきたい場合は、次のような入門書もかなり役立ちます。
楽しく学ぶUnity「3Dゲーム」作りのきほん
✅ Amazonでチェックする|✅ 楽天でチェックする
楽しく学ぶ Unity「2Dゲーム」作りのきほん
✅ Amazonでチェックする|✅ 楽天でチェックする

一度体系的に理解しておくと、「なぜ動かないのか」が直感的に分かるようになります。
Rigidbodyが動かない原因と対処法
isKinematicがONになっている
AddForceを書いているのにまったく動かない場合、まず最初に疑うべきポイントです。
症状
・力を加えても一切動かない
・重力も効かず、その場に固定されている
原因
isKinematicがONになっていると、Rigidbodyは物理エンジンの影響を受けなくなります。
つまり、衝突・重力・AddForceすべてが無効になります。
解決方法
InspectorのRigidbodyコンポーネントで、isKinematicのチェックを外します。
注意点
isKinematicをOFFにすると、今度はtransformで直接動かす処理と競合することがあります。
「物理で動かすのか」「スクリプトで直接動かすのか」はどちらかに統一した方が安定します。
再発防止のコツ
・物理挙動を使うオブジェクト → isKinematic OFF
・手動制御したいオブジェクト → isKinematic ON
このルールで分けておくと迷いにくくなります。
AddForceが効かない(Updateで書いている)
「一応動くけど弱い」「フレームによって挙動が変わる」場合に多い原因です。
症状
・力が安定しない
・環境によって挙動が変わる(PCスペックなど)
原因
物理演算はUpdateではなく、一定間隔で実行されるFixedUpdateで処理されます。
UpdateでAddForceを書くと、タイミングがズレて正しく力が加わりません。
解決方法
AddForceの処理をFixedUpdateに移動します。
参考
再発防止のコツ
・物理系(AddForce、velocity変更など)はFixedUpdateに書く
・入力処理はUpdateに書く
この役割分担を意識すると安定します。
Constraintsで移動が制限されている
特定の方向にだけ動かない場合は、ここを確認します。
症状
・X方向だけ動かない
・回転しない
原因
RigidbodyのConstraintsで「Freeze Position」や「Freeze Rotation」が有効になっている可能性があります。
解決方法
InspectorのConstraintsを確認し、不要なチェックを外します。
注意点
意図的に制限しているケースもあるので、設計との整合性を見ながら調整しましょう。
Colliderがない/isTriggerになっている
「ぶつからない」「跳ねない」系のトラブルはここが原因のことが多いです。
症状
・床をすり抜ける
・衝突しても反応しない
原因
・Colliderが付いていない
・isTriggerがONになっている(物理衝突が無効)
解決方法
・両方のオブジェクトにColliderを付ける
・必要に応じてisTriggerをOFFにする
参考
スケールが現実とズレている
見落とされがちですが、かなり重要なポイントです。
症状
・落下が遅い(スローモーションのようになる)
・全体的に動きが不自然
原因
Unityでは「1ユニット=1メートル」が前提です。
極端に大きいオブジェクトは「巨大な物体」として扱われ、結果的に動きが遅く見えます。
解決方法
モデルのスケールを現実に近づけます。
| オブジェクト | 目安スケール |
|---|---|
| 人 | 1.6〜2 |
| 車 | 約4 |
判断基準
「なんか遅い」と感じたら、まずスケールを疑うのがおすすめです。
質量(Mass)が極端
衝突の違和感は質量が原因のこともあります。
症状
・軽すぎて吹っ飛ぶ
・重すぎて全く動かない
原因
質量のバランスが極端すぎると、物理挙動が不自然になります。
解決方法
現実的な範囲に調整します。
補足
明確な「正解値」はありませんが、極端な差を避けるだけでもかなり安定します。
スリープ状態になっている
少しレアですが、ハマると気づきにくいポイントです。
症状
・止まったまま動かない
・力を加えても反応しないことがある
原因
Unityはパフォーマンスのため、動いていないオブジェクトを「スリープ状態」にします。
解決方法
・AddForceを加える
・必要ならWakeUp()を呼ぶ
補足
通常は自動で復帰しますが、状況によっては手動対応が必要になることもあります。
AddForceとvelocityの違いを理解する
同じ「動かす」処理でも、AddForceとvelocityはまったく別物です。
ここを混同していると、「なんで思った通りに動かないの?」という状態になりやすいんですよね。
AddForceは“力”を加える
AddForceは、名前の通り「力」を加える処理です。
現実の物理と同じように、力が加わることで徐々に加速していきます。
- 徐々に加速する
- 質量(Mass)の影響を受ける
- 他の物理挙動(衝突・重力)と自然に連動する
例えばジャンプや爆発の吹き飛びなど、「自然な動き」を作りたいときに向いています。
velocityは“速度”を直接変える
一方でvelocityは、「今の速度」を直接書き換える処理です。
力を加えるのではなく、いきなり速度を指定するイメージです。
- 即座に動きが変わる
- 質量の影響を受けにくい
- 細かい制御がしやすい
例えばキャラクター移動や一定速度の動きなど、「制御しやすさ」を優先したいときに使われます。
どちらを使うべきか
| 用途 | おすすめ |
|---|---|
| 自然な物理挙動 | AddForce |
| 正確な移動制御 | velocity |
ここでよくあるミスが、「AddForceで思った通りに動かないからvelocityに変えたら動いた」というケースです。
これは一見正解に見えますが、
物理挙動を捨てて無理やり動かしている状態になっていることも多いです。
・ジャンプが不自然になる
・衝突時の挙動がおかしくなる
こういった問題につながることもあるので、用途に合わせて選ぶのが大切です。

「自然さを取るか」「制御しやすさを取るか」
この視点で考えると、迷いにくくなります。
正常な挙動と異常な挙動の判断基準
「なんかおかしい気がする…」という感覚だけだと、修正の方向を間違えやすくなります。
まずは“どこまでが正常なのか”を知っておくと、原因の切り分けが一気に楽になります。
正常な挙動の目安
- 動き始めが滑らかで、急に速度が変わらない
- 重さに応じて加速や減速が自然に変化する
- フレームレートが変わっても挙動が安定している
- 衝突時に違和感のない反応(止まる・跳ねるなど)をする
例えば、ジャンプさせたときに「ふわっと上がって、頂点で止まり、自然に落ちる」ような動きは正常です。
異常な挙動の例
- 急に止まる、または急加速する
- 異様に遅い、または速すぎる
- フレームごとにガタガタ動く
- ぶつかっても反応しない、または吹っ飛びすぎる
特に多いのが「落下が遅い」ケースです。
これはスケールが大きすぎる可能性が高く、物理的には正しくても“見た目がおかしい”状態になっています。
迷ったときの判断ポイント
判断に迷ったら、次の視点でチェックしてみてください。
- 現実の動きと比べて違和感がないか
- 同じ処理なのに環境で結果が変わらないか
- 「設定変更で改善するか」それとも「コード変更が必要か」
経験上、「見た目がおかしい」と感じたときは、
・スケール
・質量
・FixedUpdateの使用
この3つのどれかに原因があることが多いです。

逆にここが正常なら、初めてコードのロジックを疑う、という順番で考えると効率よくデバッグできます。
すぐ確認できるチェックリスト
原因を1つずつ探すのが面倒なときは、この順番でチェックしていくと効率よく切り分けできます。
上から順に確認していくだけで、ほとんどの場合は原因にたどり着きます。
- □ isKinematicがOFFになっているか
- □ AddForceや物理処理をFixedUpdateに書いているか
- □ Constraintsで位置や回転が固定されていないか
- □ Colliderが正しく付いているか(isTriggerになっていないか)
- □ オブジェクトのスケールが極端でないか
- □ Mass(質量)が不自然な値になっていないか
ポイントは「コードより先に設定を見る」ことです。
特に初心者のうちは、スクリプトに原因があると思い込みがちですが、
実際にはInspectorの設定ミスの方が圧倒的に多いです。
私の場合も、デバッグで時間がかかるときは
「とりあえずこのチェックリストを全部確認する」と決めています。
それだけで、無駄にコードをいじって状況を悪化させるのを防げるんですよね。

もしここをすべて確認しても直らない場合は、
「物理の仕組みの理解」か「設計」の問題に進むのが次のステップです。
よくある誤解・注意点
「動かない=コードミス」は誤解
動かないとついスクリプトを疑いたくなりますが、実際は設定が原因のケースがかなり多いです。
特にisKinematicやConstraintsは、見落としやすいのに影響が大きいポイントです。
コードを直す前に、Inspectorの状態を一通り確認するだけで解決することもよくあります。
「Updateでも問題ない」は誤解
見た目上は動くこともあるので気づきにくいのですが、物理処理をUpdateに書くのは不安定の原因になります。
・環境によって挙動が変わる
・フレームレートで結果が変わる
こういったトラブルにつながるため、物理系の処理はFixedUpdateにまとめるのが基本です。
「一度動いたから設定は正しい」は危険
Unityは複数の要素が組み合わさって動くため、たまたま動いているだけの状態もあります。
例えば、
・たまたま制約と力が打ち消し合っている
・スケールがズレているのに気づいていない
といったケースもあります。
安定して動くかどうかを確認するためには、
・再生を繰り返す
・値を少し変えてみる
といった検証も大切です。
transformで動かしてもいい?
Rigidbodyを使っているオブジェクトをtransformで直接動かすと、物理挙動と競合します。
- 当たり判定がおかしくなる
- めり込みやワープが発生する
こういった問題が起きやすくなります。
基本的には、
・物理で動かす → AddForce / velocityを使う
・手動で動かす → Rigidbodyを使わない(またはisKinematic)
このように役割を分けるのがおすすめです。
見た目だけで判断しない
「なんとなく変だな」と感じても、それがバグなのか仕様なのか判断しにくいことがあります。
そんなときは、
・数値(速度・質量)を見る
・ログを出す
・極端な値でテストする
といった方法で、客観的に確認すると原因が見えやすくなります。
物理挙動が安定する設計のコツ
ここまでの内容で「動かない原因」はかなり潰せます。
次は一歩進んで、「そもそも不安定になりにくい作り方」を押さえておくと、トラブル自体が減っていきます。
Interpolateでガタつきを防ぐ
オブジェクトがカクカク動く場合、RigidbodyのInterpolate設定が影響していることがあります。
- None:補間なし(カクつきやすい)
- Interpolate:前フレームとの補間
- Extrapolate:次の動きを予測して補間
カメラ追従やプレイヤーなど、見た目の滑らかさが重要なオブジェクトにはInterpolateを使うことが多いです。
ForceModeを使い分ける
AddForceには複数のモードがあり、これを理解していないと「思ったより弱い・強すぎる」というズレが起きます。
| モード | 特徴 |
|---|---|
| Force | 継続的な力(質量の影響あり) |
| Impulse | 瞬間的な力(ジャンプや爆発向け) |
| Acceleration | 質量を無視した加速 |
| VelocityChange | 即時速度変更(かなり強い) |
例えばジャンプならImpulse、移動補助ならForceなど、用途に合わせて選ぶと自然な挙動になります。
レイヤー衝突設定を確認する
Colliderが付いているのに当たらない場合、Layer設定が原因のこともあります。
Unityでは、特定のレイヤー同士の衝突を無効化できます。
これは便利な機能ですが、意図せずOFFになっていると「なぜか当たらない」という状態になります。
Project Settings → Physics から、Layer Collision Matrixを確認できます。
スケールと質量をセットで考える
スケールだけ、質量だけを調整しても違和感が残ることがあります。
例えば、巨大なオブジェクトなのに軽いと「紙みたいに吹っ飛ぶ」動きになります。
・大きい → 重くする
・小さい → 軽くする
このバランスを意識すると、かなり自然になります。
デバッグ用に極端な値で試す
原因が分からないときは、あえて極端な値を入れるのも有効です。
- 重力を大きくする
- 力を10倍にする
- 質量を極端に変える
こうすると、「どこが効いているのか」「どこが効いていないのか」がはっきり見えるようになります。

数値を大きく変えても挙動が変わらない場合、その設定は効いていない可能性が高いです。
まとめ
Rigidbodyが思った通りに動かないときは、やみくもにコードを直すよりも「確認する順番」を意識する方が早く解決できます。
まずは次の順番でチェックしてみてください。
- 設定(isKinematic / Constraints / Collider)
- スクリプト(FixedUpdate / AddForceの使い方)
- スケールと質量(見た目と物理のズレ)
この順番で見るだけでも、かなりの確率で原因にたどり着きます。
実際に開発していると、「なんで動かないんだろう…」と長時間悩むこともありますよね。
でも振り返ると、ほとんどは基本的な設定ミスだったりします。
逆に言えば、今回のようなポイントを押さえておくだけで、デバッグのスピードはかなり上がります。
・物理で動かすのか、手動で動かすのかを明確にする
・UpdateとFixedUpdateを使い分ける
・スケールと質量のバランスを見る
このあたりを意識しておくと、「なんかおかしい」を自力で判断できるようになります。
物理挙動は最初は少し難しく感じますが、仕組みが分かると一気に楽しくなってきますよ🙂
よくある質問(FAQ)
- QRigidbodyがあるのに動かないのはなぜ?
- A
一番多い原因は、isKinematicがONになっているケースです。
これが有効だと、AddForceや重力が一切効かなくなります。その次に多いのが、Constraintsで移動が固定されているパターンです。
特にX・Y・ZのどれかがFreezeされていないかはチェックしてみてください。
- QAddForceとvelocityはどっちを使えばいい?
- A
用途によって使い分けるのがポイントです。
- 自然な動き(ジャンプ・爆発など) → AddForce
- 正確な制御(キャラ移動など) → velocity
迷った場合は、「物理っぽい動きにしたいか」で判断すると選びやすいです。
- Q物理挙動がカクつく原因は?
- A
主な原因は次の3つです。
- InterpolateがOFFになっている
- FixedUpdateを使っていない
- フレームレート依存の処理になっている
特に見た目のガタつきはInterpolateで改善することが多いので、まずはそこを確認してみてください。









※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。