赤いスクエアを
①左右に動かす。
②上下左右に動かす。
③キー操作なしで自動で動かす。
④一定の時間で反転するように動かす。
⑤ランダムに動かす。
は、できるようになったので、今度は
⑥ジャンプさせる。をやってみよう。
基本的にはrb.Velocity=new Vector2(xのスピード、yのスピード );
のスタイルでやってみたい。
②のスクリプトに手を加えればできそう。
とチュートリアルをなるべく見ないでトライしてみることに。
上下の動きはこないだできたわけだから、縦のスピードを大きくすれば、ジャンプらしく見えるでは?
やってみると上には移動するものの、落ちてこない。
そりゃそうだ!Rigidbodyの重力をゼロにしてあったからね。
重力を1にしてやってみる。
そうすると当然、ほっといても赤いスクエアは下に落ちてくる。
が、放っておくとどこまでも落ちていく。
ジャンプをやるときは、地面がないとダメだな。
2Dオブジェクトのスクエアをもう一つシーンに追加してGroundとする。
これにBoxColliderを付けた。
これで赤いスクエアは画面からいなくならないね。と思ったがまだ落ちていく。
衝突判定は、二つのオブジェクトの両方にColliderがあることと、すくなくともどちらかにRigidbodyがあることが条件だった!!
地面にはRigidbodyはなくてもよいわけだし、赤いスクエアには既にRigidbodyはついているわけなので、赤いスクエアの方にBoxColliderを付ける。
これで地面で止まるようになった。
ジャンプらしくピョンと飛び上がる感じをだすには、横移動とは違い、かなりのスピードが必要なのに違いない。横移動のxスピードは2だったので、yスピードを10にしてみるが、なんだかのんびりとした動き。更に50,100,1000と増やしてみたけど、あまり変化はない。これではダメなようだ。スピードを速くするだけでは、ジャンプの動きにはならないようだ。
ここで、やはりチュートリアルを参考にすることに。
今日もれいさんのサイト参照
Unity 2Dアクションの作り方【ジャンプ】【高さを押した長さで変更可】 | ゲームの作り方! (dkrevel.com)
れいさんはインスペクターの重力を使わずに、スクリプトから重力を操作していた。
自分で決めた重力(Gravity)を飛び上がるスピードとしても使っている。
あと、地面との衝突判定のために地面にもGroundCheck.csというスクリプトを作って貼り付けているが、これが結構複雑、、、、OnTriggerEnterとOnTriggerStayとOnTriggerExitを全部チェックして場合をわけているが、そこまでやらないとダメなのか、、、、?
地面のTagをGroundにして、OnTriggerEnterなら飛ぶかとやってみたが、飛ばない( ;∀;)
ん?なんでだ? なるほど~~!
一瞬飛びあがっても、地面とくっついていない状態になると、着地しているというフラグがfalseになってしまうため、飛び上がれなくなってしまうということか。ちゃんとれいさんが解説してくださっている。手抜きしようとすると、逆にわけのわからないことになって、遠回りすることになってしまう、ありがちな罠だ。
続きはまた明日、ちゃんとれいさんの教えの通りにやることにしよう。
今日はぽんさんがボス戦用のドラゴンをあらたに描いて、アニメーションを作ってくれていた。ぽんさんもBlackthornprodさんの動画が気に入っていて参考にしているようで、いろいろ学ぶとことがあると言っていた。
動画👇
ボスのわりには素朴でかわいいドラゴンだが、キツネくんとのバランスが程よい感じ。この強そうでない愛嬌のあるボスドラゴンで進めることに。周りにいるにぎやかしの雑魚は、Blackthornprodさんのチュートリアルからの借り物なのだとか。
キツネくんとドラゴンがぽんさんのオリジナル。まだキツネくんはおいてあるだけだから、石の地蔵のようにただ突っ立っているだけ。ドラゴンがいくら脅しにかかっても平然としているから、逆にドラゴンの方がびっくりしているw
(こん)