ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Unity の重力モデル
Unity の物理エンジンは PhysX (3D) と Box2D ベース (2D) の 2 系統で、重力はそれぞれ別管理です。デフォルトの 3D 重力は Vector3(0, -9.81, 0) で、地球の表面重力 (約 9.81 m/s²) に相当します。
1. Project Settings から全体変更
- Edit → Project Settings を開く
- 左ペインから Physics を選択
- Gravity の値を変更 (例: 月面なら Y=-1.62)
2D の場合は Physics 2D タブの Gravity を変更します。
2. スクリプトから動的変更
using UnityEngine;
public class GravityController : MonoBehaviour {
void Start() {
// 重力を 2 倍に強化 (落下が速くなる)
Physics.gravity = new Vector3(0, -19.62f, 0);
}
public void ToMoon() {
// 月面相当
Physics.gravity = new Vector3(0, -1.62f, 0);
}
public void ZeroG() {
// 無重力
Physics.gravity = Vector3.zero;
}
public void Reverse() {
// 上下反転 (天井に落ちる)
Physics.gravity = new Vector3(0, 9.81f, 0);
}
}
3. Rigidbody 単位での重力制御
全体の Gravity ではなく このオブジェクトだけ重力 OFF にしたい場合:
Rigidbody rb = GetComponent();
// 重力を無効化 (浮遊させる)
rb.useGravity = false;
// 自前で力を加える
rb.AddForce(Vector3.up * 5f, ForceMode.Acceleration);
// 速度を直接セット
rb.velocity = new Vector3(0, 2f, 0);
| 項目 | 意味 |
|---|---|
useGravity | このオブジェクトに重力を適用するか |
mass | 質量 (kg)。落下速度には影響しない (ガリレオの原理) |
drag | 空気抵抗。大きいほど落下が遅くなる |
isKinematic | true で物理影響を完全に切る (手動制御) |
4. 2D ゲームの重力
2D では Physics2D と Rigidbody2D.gravityScale を使います。
// 全体重力 (2D)
Physics2D.gravity = new Vector2(0, -20f);
// 個別 (Rigidbody2D)
Rigidbody2D rb2d = GetComponent();
rb2d.gravityScale = 1f; // 1 = 全体重力どおり
rb2d.gravityScale = 0f; // 重力なし
rb2d.gravityScale = 3f; // 3 倍重い感触 (シビアな落下)
rb2d.gravityScale = -1f; // 逆向き (上に浮く)
5. ジャンプ感を調整するレシピ
ゲーム的に気持ち良いジャンプは 現実の重力よりかなり強め がコツです。
public class JumpFeel : MonoBehaviour {
[SerializeField] private float jumpVelocity = 8f;
[SerializeField] private float fallMultiplier = 2.5f; // 落下時は重力を強める
[SerializeField] private float lowJumpMultiplier = 2f; // ボタン離しで小ジャンプ
Rigidbody rb;
void Awake() { rb = GetComponent(); }
void Update() {
if (Input.GetButtonDown("Jump")) {
rb.velocity = new Vector3(rb.velocity.x, jumpVelocity, rb.velocity.z);
}
// 落下中: 重力を強める
if (rb.velocity.y < 0) {
rb.velocity += Vector3.up * Physics.gravity.y * (fallMultiplier - 1) * Time.deltaTime;
}
// ジャンプ中にボタン離し: 重力を強める
else if (rb.velocity.y > 0 && !Input.GetButton("Jump")) {
rb.velocity += Vector3.up * Physics.gravity.y * (lowJumpMultiplier - 1) * Time.deltaTime;
}
}
}
6. 水中 / 浮力ステージ
Trigger Collider で「水中エリア」を作り、内部に入った Rigidbody の重力を弱めます。
public class WaterZone : MonoBehaviour {
void OnTriggerEnter(Collider other) {
var rb = other.GetComponent();
if (rb) {
rb.useGravity = false;
rb.drag = 5f; // 抵抗を増やす
rb.AddForce(Vector3.up * 3f, ForceMode.Acceleration); // 浮力
}
}
void OnTriggerExit(Collider other) {
var rb = other.GetComponent();
if (rb) {
rb.useGravity = true;
rb.drag = 0f;
}
}
}
よくあるトラブル
| 症状 | 原因 | 対処 |
|---|---|---|
| 重力を変えても落ちない | Rigidbody 未追加 / isKinematic = true | Rigidbody 追加、isKinematic を false |
| 重さを変えても落下速度が同じ | 仕様。mass は落下速度に無関係 | drag や AddForce で調整 |
| 2D で重力が効かない | 3D の Physics.gravity を変更してる | Physics2D.gravity を変更 |
| Editor 終了後も重力が残る | 静的変数は保持されない (実は次回起動でリセット) | Project Settings で恒久変更 |
FAQ
Q: 重力方向を横向きにできる?
A: はい。Physics.gravity = new Vector3(-9.81f, 0, 0); で左方向。VR の「壁を歩く」演出にも使えます。
Q: ParticleSystem に重力は効く?
A: ParticleSystem の Gravity Modifier プロパティが効きます。1.0 で Physics.gravity に追従。
Q: キャラだけ違う重力にできる?
A: useGravity を切り、毎 FixedUpdate で rb.AddForce(独自重力, ForceMode.Acceleration); を加算します。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?