
当記事ではCollider【コライダー】とRigidbody【リジッドボディ】を利用したジャンプの実装方法をまとめる。コンポーネントの取得やアタッチについては【Unity】コンポーネントの取得や【Unity】オブジェクトの取得を参照。また、床との接触判定については【Unity】接触・衝突・当たり判定を参照。
また、その他のUnityに関する記事は【Unity】サイト内Tips記事リンクまとめにまとめてある。
Rigidbodyコンポーネントの追加

他のコンポーネント同様オブジェクトのInspector【インスペクター】の[Add Component]ボタンから追加。
Unityエディタで作成した3Dオブジェクトであれば自動的にColliderは入っているはずだが、なければこれも適宜追加しておく。
RigidbodyのUse Gravityのチェックボックスも忘れずに有効化しておく。
Unityエディタで作成した3Dオブジェクトであれば自動的にColliderは入っているはずだが、なければこれも適宜追加しておく。
RigidbodyのUse Gravityのチェックボックスも忘れずに有効化しておく。
ジャンプに必要なスクリプト

①まずRigidbodyを取得する準備として宣言。
保存したら一旦Unityエディタに戻り上の画像のようにスクリプトにできた枠にD&D。
②あとは必要な部分で「hoge.AddForce(transform.up);」を記述するだけ。
以下のサンプルではスペースキーが押されたときにジャンプ力500でジャンプする。
③これだけでは空中にいてもジャンプできてしまうので、これを制限する変数を1つ作る。
以下のサンプルではbool型で宣言しfalseで初期化している。
④着地と空中で切り替えるために接触判定を追記する。
このサンプルではタグを利用するのでUnityエディタから床となるオブジェクトにyukaタグを追加しておく。
⑤あとはこの変数hugaを②で書いたif文の条件に書き加えるだけ。
public Rigidbody hoge;
保存したら一旦Unityエディタに戻り上の画像のようにスクリプトにできた枠にD&D。
②あとは必要な部分で「hoge.AddForce(transform.up);」を記述するだけ。
以下のサンプルではスペースキーが押されたときにジャンプ力500でジャンプする。
if (Input.GetKeyDown(KeyCode.Space)){
hoge.AddForce(transform.up*500);
}
③これだけでは空中にいてもジャンプできてしまうので、これを制限する変数を1つ作る。
以下のサンプルではbool型で宣言しfalseで初期化している。
bool huga = false;
④着地と空中で切り替えるために接触判定を追記する。
このサンプルではタグを利用するのでUnityエディタから床となるオブジェクトにyukaタグを追加しておく。
void OnCollisionStay(Collision col){
if(col.gameObject.tag == "yuka"){
huga = true;
}
}
void OnCollisionExit(Collision col){
if(col.gameObject.tag == "yuka"){
huga = false;
}
}
⑤あとはこの変数hugaを②で書いたif文の条件に書き加えるだけ。
おまけ:落下が遅く感じるときは…
物理演算としては適切な落下速度だがゲームとしては少しふわついた印象に感じる場合もある。
この場合以下のコードをStart関数に書くことでゲーム全体の重力の強さを変更できる。
この場合以下のコードをStart関数に書くことでゲーム全体の重力の強さを変更できる。
Physics.gravity = new Vector3(0, -9.8, 0);//-9.8を変更