忍者ブログ
とりあえずオキュラス発売までにunityであれこれ作れるようになることを目標として日記とする所存。その他には大学で学んだこと、勉強会でのあれこれなど。

unityで2d横スクロールゲー作る_part4



ステージを一つ用意しまして、今回はできるまでこのステージのギミックを実現していきたいと思います。

・動かせるブロック
・スイッチと連動するドア
・大ジャンプができるバネ

というわけで一つ一つ処理していきます。

動かせるブロック

こちらは簡単。



左が動かないブロック、右が動くブロックです。以前のパートでも記述しましたが、

・FixedAngleにチェックが入っていれば外から受けた力で回転しない
・IsKinematicにチェックが入っていれば物理の影響を受けない



ずるずるっと動かせるようになりました。


スイッチと連動するドア

ボタンを押している間のみドアが開き、ボタンからはなれるとドアが閉まる、そんなギミックがほしい、ということで。ボタンのスクリプトを編集します。

    pushed = Physics2D.Linecast(transform.position,
            transform.position + transform.up * 0.01,
            button);

前回も使ったLinecastを使ってみます。今回は上伸ばします。
もしpushedになっているならドアを開け、なっていないならドアを閉めます。





たしかにドアが開くようになりました。



そして離れると閉まってしまう。



ブロックを落とせば



通過!ゲームっぽくなってきた気がします。

大ジャンプができるバネ

乗ると否応無しに大ジャンプさせられる、そんなバネがほしいというわけで。

    onSpring = Physics2D.Linecast(transform.position,
            transform.position - transform.up * 0.53,
            spring);

馬鹿の一つ覚え状態ですがまたLenecast
バネに乗った状態をonSpringとします。

ジャンプのとき同様、AddForceを使用してジャンプさせたいところですが、
このままではうまくジャンプ出来ません。その理由をまとめ。




バネが上に10の力を与えてくれるとしましょう。



落ちてくるときには落ちる力がかかるというものです。これを8とします。



2程度の力しかかかりません。バネへの乗り方によって飛ぶ高さがバラバラになってしまいます。これはよろしくない。

            GetComponent.<Rigidbody2D>().velocity = Vector2(0,8);

そんなわけで今回使用するのがこちら。力を与えるのでなく力を指定します。



どんな早さで落ちてきても関係なく一定の高さに飛び上がれるようになりました。ということでバネ終了。

今回までで今考えついているステージのギミックが出来上がりました。
次回はリセット、ゲームクリア、ゲームオーバーなどの処理を設置していきたいと思います。
PR