どうも、チャーさんです。
あなたはUnityでジャンプ機能を作りたい
と思っていますか?この記事では、パソコンの
キーボードを押したら、ジャンプする機能の作り方を説明します。
なのであなたがこの記事を読めば、
オブジェクトであれ、キャラクターであれスペースキーを
押したらジャンプさせるというのができますよ。
しかしこの記事を読まなければ、おかしいジャンプになったり、
ワープしたりそもそもジャンプできなかったり
色々求めてるジャンプにならなくて困るかも
ですので、そうなりたくなければ読んでください。
動画はこちら
目次
Unityでジャンプさせる方法
ということで早速説明していきます。
Unityで自然なジャンプ機能を作るには、
RIgidbodyのvelocityを使えばできます。
velocityでジャンプできる理由
理由はRigidbodyのvelocityを使うことで
物理が計算された自然なジャンプになり、
transformとかのワープする様な動きにならないからです。
ということであなたがUnityでジャンプ機能を作りたい
ならRigidbodyのvelocityでジャンプさせましょう。
velocityってなんなん?
でここであなたはふと思うかもしれません。
「Rigidbodyはなんとなく知ってるけど、
velocityって何やねん」、と。
ということでvelocityについてなるべく簡単に
深追いしない様に話します。
まずvelocityとは、速度のことでして、Unity内では
平たくオブジェクトの移動速度だと思ってください。
つまりvelocity(オブジェクトの移動速度)が
0ならオブジェクトはその場で全く動かないですし、
velocity(オブジェクトの移動速度)が10なら
1秒間あたり10m(unity内での単位で)
オブジェクトが動く(移動する)ってことです。
ということで、UnityではRigidbodyのvelocityとは
移動速度を表す数値であり、
肝心なことは、このvelocityを使えばオブジェクトを
動かすことができます。
動かせる方向はx軸、y軸、z軸、どの方向にでも動かせます。
ということでy軸、つまり上に移動させればジャンプです。
なので、物理の効いた自然なジャンプができます。
これ以上はジャンプには関係なくなる知識かと思うので
ということでここからは、手順を書いていきます。
Unityでジャンプ機能の実装手順
1Rigidbodyつける
2スクリプト貼り付ける
3ジャンプのコードを書く
です。
というわけで順番に説明します。
1、Rigidbodyつける
今までの説明からRigidbodyのvelocityで
ジャンプさせるのでRigidbodyをつけましょう。
なので、あなたがジャンプをさせたい
と思ってるオブジェクトや、キャラクターオブジェクト
にRigidbodyコンポーネントをつけてください。
2、スクリプトつける
でつけ終わったら、次は、スクリプトを貼り付けましょう
同じ様にAdd Componentボタン押して、
検索窓にnewと打ち込んだら
new scriptというのがあるのでそれを選び、
jumpとでも名前をつけてスクリプトコンポーネントを
そのオブジェクトにつけてください。
3、コードを書く
でそれが終わったらコードです。
コードは以下の様に書きましょう。
Unityジャンプ用のスクリプト
上記のコードはキーボードのスペースキーを押すと
ジャンプします。
かつ二段ジャンプ不可能なコードです。
着地判定をしてるので、地面となるオブジェクト
(planeとか)には、
groundというタグ名を新規で追加して
地面になるオブジェクトにつけましょう。
ということでここからはコードの説明をします。
まずジャンプに関わる記述だけを抜粋しますと、
以下です。
Rigidbody rb ;
です。
記述を言葉に変えるとやってることとしては、
・Rigidbody用の変数を宣言
・Rigidbodyコンポーネントの取得
・スペースキーを押したらジャンプする
というものです。
Rigidbodyはスクリプトで操作する際
取得する必要があるので変数宣言、取得してまして
で今日の本題であるジャンプ用のRigidbodyのvelocityは
rb.velocity = new Vector3(0,10,0);
という書き方をします。
new vector3(x軸,y軸,z軸)なので、
上記の様に書くことでy軸方向、
つまり上にジャンプします。
またRigidbodyを使うのでUpdate関数を
FixedUpdateに書き変えます。
で、この以下の
ですがif文のとこはパソコンキーボードの
スペースキーを押したらという意味でして、
押したらvelocityが動いてジャンプするって記述です。
ということで、一旦あなたの方でもスクリプトに
説明した記述を書き加えて試してみましょう。
で、ゲーム再生状態にしてスペースキーを押して
ジャンプできればちゃんと書けてます。
ジャンプの高さを変える方法
ちなみにジャンプの高さは、この
rb.velocity = new Vector3(0,10,0);
の部分で変えれます。
上記では、new vector3の()内のy軸が10になってますが、
ここを5とかにすればジャンプの時の高さが低くなりますし、
数字を増やすとより高くジャンプする様になります。
コードとして紹介してないですが、
この数字部分を変数にしてインスペクターから編集
できる様にすればジャンプの高さを簡単に操作できますね。
空中ジャンプ、二段ジャンプ防止のコード
で、ここからは二段ジャンプを防ぐコード部分です。
キーとなるのは、
bool型のisJumpingという変数と、
着地判定の部分です。
やってることとしては、スペースキーを押して
ジャンプしたら、isJumpingという変数をtrueに
します。
そしてisJumpingがtrueになってる間は
スペースキーを押してもジャンプできないと
いう様にします。
ですがずっとそのままでは困るので地面に着地
したらisJumpingをfalseに戻します。
するとまたジャンプできる様になります。
コード的には、isJumpingの部分が以下でして、
最初にbool型で変数宣言し、ゲームスタートと同時に
falseをセットします。
private bool isJumping;
void Start()
{
isJumping = false;
}
そして、
if(Input.GetKeyDown(KeyCode.Space)){
if(isJumping == false){
rb.velocity = new Vector3(0,10,0);
}
isJumping = true;
}
でスペースキーを押した時に、isJumpingがfalse
であれば、ジャンプし、同時にisJumpingを
trueにするというコードを書くことで
再度スペースキーを押しても、
isJumpingがtrueになってるので、
ジャンプできないわけです。
で地面に着地したらtrueをfalseにする
部分が、以下でして、
void OnCollisionEnter(Collision col){
if(col.gameObject.tag == “ground”){
isJumping = false;
}
}
上記のコードによって、groundというタグを設定
した地面用のオブジェクトに触れたら、
isJumpingがfalseになります。
タグを設定してるのは、これを設定しないと
どんなオブジェクトにプレイヤーオブジェクトが
接触してもisJumpingが解除されてしまうからです。
なのでfalseをセットするのをgroundという
タグがついたオブジェクトに限定することで、
二段ジャンプ防止が意図しないことで解除されるのを
防ぐという感じです。
なので上記のコードを書いたら、
あなたが地面として使うオブジェクトにはタグを
設定しておきましょう。
ということでこれでジャンプもできて
空中ジャンプ防止の機能ができました。
ということであなたの方でもコード書いたら、
一度ゲーム再生ボタンを押し、
スペースキーを押してみましょう。
ジャンプできましたか?空中で再度押しても
空中ジャンプしないですか?
そうであれば成功です。
まとめ
ということでまとめです。
Unityでジャンプさせるには、
以下をやりましょう。
Rigidbodyのvelocityでジャンプさせる。
で手順としては、
1Rigidbodyつける
2スクリプト貼り付ける
3ジャンプのコードを書く
ですね。
コードは記事中程を参照してください。
ということでUnityでジャンプさせる方法でした。
読んでいただきありがとうございました。
それでわ。
チャーさん