この記事の目標:キャラクターをジャンプさせる方法が分かる
キャラクターを動かすって難しい・・・
ジャンプさせたいんだけど・・・
実際のゲームを使って解説します。
プログラミングコードも載せておくので参考にしてください。
ゼロからゲームを作ることは大変だと思いませんか?
まずはこの記事を見て真似してみてください。
読み終わったころには「そういうことかっ!できるできる」と自信が着くことでしょう。
この記事を読むと分かること・・・
プログラミングコードに書かれた意味を詳しく解説していきます。
せっかく始めたゲーム開発・・・。
挫折してしまうのはもったいない!
朝起きたら、ゲーム開発に関する知識詰め込まれてないかな・・・なんて。
アンケートで分かった「稼ぐこと」ができた学習方法をまとめました。
\ゲーム開発ができる「引き出し」が無限に!/
ゲーム開発ができる世界へワープしませんか?
キャラクターをジャンプさせるプログラミングコード
using UnityEngine;
public class catplayerController : MonoBehaviour
{
public Rigidbody2D rb2d;
public float jump = 300f;
// Start is called before the first frame update
void Start()
{
rb2d.isKinematic = true;
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (rb2d.isKinematic == true)
{
rb2d.isKinematic = false;
}
rb2d.velocity = Vector3.zero;
rb2d.AddForce(Vector3.up * jump);
}
}
}
これだけで分かるなら苦労してないよ〜
順に細かく解説します。
まずは動きを確認していきましょう!
キャラクタージャンプさせよう(Rigidbodyで落下)
左側がマウスをクリックするとジャンプしているのが分かるかと思います。
右側はマウスをクリックしても落下していくだけですね。
重力や落下の速度調整のやり方が分からない場合は前回の記事をみてください。
キネマティックを使ってキャラクターを止める
ゲームが開始しても落下せず、留まって欲しいときに使います。
実装するためのコードはこちらです。
// Start is called before the first frame update
void Start()
{
rb2d.isKinematic = true;
}
Void Start()以下にコードを書き込むことでゲーム開始時にコードを起動できます。
5行目に書かれたpublic Rigidbody2D rb2d;により
Rigidbody2D = rb2dとしますと宣言しています。
宣言したrb2d を isKinematic(重力停止状態) = true;(アクティブ状態にしてね)といった具合です。
まだまだ分かりにくい・・・
もう少し分かりやすく言葉だけでお伝えすると・・・
重力を管理するための機能を使って・・・rb2d.
停止状態に・・・isKinematic
実行する(アクティブ状態にする)・・・= true;
こんな具合にコードを分解して考えると理解が深まります!
マウスをクリックしたら・・・(IF文の使い方)
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (rb2d.isKinematic == true)
{
rb2d.isKinematic = false;
}
}
Void Update()以下にコードを書き込むことで条件を満たした時にコードを起動できます。
if文は活用頻度が多く使い勝手も良いので覚えていきましょう。
気になるけど文法とか難しそうだな・・・
意外と簡単なのでみていきましょう。
このキーワードさえ覚えておけば大丈夫です。
では、実際のコードでみていきましょう!
if (Input.GetMouseButtonDown(0))
これは、もしも(マウスのボタンがクリック)されたら・・・となります。
なんとなく分かってきたかも!
続きのコードをみていきましょう!
if (rb2d.isKinematic == true)・・・もしも、rb2db2d.isKinematic が trueだったら・・・となります。
さらに読み進めるとrb2d.isKinematic = false;・・・rb2d.isKinematic を false;(非アクティブ状態にしてね)
つなげると・・・
if (Input.GetMouseButtonDown(0))・・・
もしもマウスのボタンがクリックされたら
if (rb2d.isKinematic == true)・・・
もしもrb2db2d.isKinematic が trueだったら
rb2d.isKinematic = false;・・・
rb2d.isKinematic を false;(非アクティブ状態にしてね)
もしもの連続で分かりにくい・・・
図で解説します。
ifが連続した場合の見方です。
ジャンプのさせかた
public float jump = 300f;
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (rb2d.isKinematic == true)
{
rb2d.isKinematic = false;
}
rb2d.velocity = Vector3.zero;
rb2d.AddForce(Vector3.up * jump);
}
}
rb2d.AddForce(Vector3.up * jump);
こちらのコードでジャンプさせることができます。
分解すると・・・
rb2d.AddForce・・・
重力を管理する機能に力を加える機能を付与する(AddForce)
Vector3.up・・・
力を加える機能に力の向きと動かす力を加える
* jump);・・・
1行目のpublic float jump = 300f;によりjumpへ代入(300fが移動量)
しかし問題がジャンプするときに詰まった感じになりいっぱいマウスをクリックしないとジャンプしません・・・。
なぜこのような現象が起きるかというとRigidbody2Dがジャンプを邪魔しているからです。
スムーズにジャンプするためには
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (rb2d.isKinematic == true)
{
rb2d.isKinematic = false;
}
rb2d.velocity = Vector3.zero;
rb2d.AddForce(Vector3.up * jump);
}
}
rb2d.velocity = Vector3.zero;
こちらのプログラミングコードを入れる必要があります。
順番に読み解いていきましょう。
rb2d.velocity・・・重力を管理する機能のベクトル(velocity:力や向き)
Vector3.zero;・・・ベクトルにかかる力と向きをゼロにする
組み合わせると・・・
複雑になってきた・・・
ジャンプする直前に重力をゼロにすることでスムーズなジャンプを実現しています。
ジャンプの高さ調整方法
public float jump = 300f;
public 欄に型と名前(任意)を入力し値を入れるとインスペクターで調整することができます。
300と記入してある部分を入力変更すると・・・
すごい勢いでジャンプしていきましたね・・・
コード内のjump = 300 を変更することでジャンプする高さを変更もできます。
\ゲーム開発ができる「引き出し」が無限に!/
ゲーム開発ができる世界へワープしませんか?
キャラクターをジャンプさせる方法【まとめ】
プログラミングコードと実装の手順を解説してきました。
コードを分解して解説をすることでより理解が深まったかと思います。
コードの意味を理解しながら実装できると
ゲーム開発が楽しくなります!
キャラクターのジャンプのさせかたが分かった!
オリジナルゲームの作りたい!これからゲーム開発をしてみたい!
あなたへ有益な情報が届けられるよう記事を書いていきます。
次の記事でお会いしましょう。
最後まで読んでいただきありがとうございました!
ゲームの作り方総集編!
11ステップであなたもゲームが作れる。喜んでもらえる。
未経験からでも、分かる!が積み上がりゲームを完成できる。
詳細はこちらから。
コメント