BLOG ブログ

【Unity】ColliderとRigidbodyでつくるジャンプ

ColliderとRigidbodyでジャンプを作る

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

Rigidbodyコンポーネントの追加

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

ジャンプに必要なスクリプト

Rigidbodyのアタッチ
①まずRigidbodyを取得する準備として宣言。
 
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関数に書くことでゲーム全体の重力の強さを変更できる。
Physics.gravity = new Vector3(0, -9.8, 0);//-9.8を変更

CONTACT お問い合わせ

無料体験授業は随時開催しています。 ご希望やご質問など、お気軽にお寄せください。