見出し画像

UnityでUFOキャッチャーを作ろう



【はじめに】

Unity PathwayのJuniorProgrammer講座提出用の題材が
UFOキャッチャーに向いていたので、作ろうと決意

【UFOキャッチャー要素】


①クレーンの移動

 移動に関しては物理演算を使わず、『transfrom.Translate』 を利用して
 稼働するようにしました。

シンプル


 物理演算を使わない理由は
 【アーム部分にRigidbodyを利用するため
      子オブジェクトのアーム部分が追従しない】です
 はじめは、Jointを利用してアームを作っていたのですが
 そうすると、クレーン本体が移動するとjointをアタッチしたパーツが移動
 しませんでした。
 
 普段3Dゲームを作らないものだから、全然知りませんでした・・・
 いろいろやれば追従するんだろうけども、難易度が高そうなので見送り

②アームの降下

 アームの降下に関しては、各可動の間を意識して作成しました
 ここで威力を発揮したのが『DOtween』
 

DOtweenなしでは生きられない

便利ですよね、DOTween
まだまだ全然使いこなせませんが、「指定した箇所へ、何秒で移動」
を実行するならこれ以上に便利なものもない
ただ、何も考えずにほいほい動作を足すと、ネストが深くなるので
もっとちゃんと作れるようにしていこうと思う

③アームの稼働

はじめはjointを利用しようと思っていましたが、前述のとおり移動するオブジェクトと相性が最悪だったので、アニメーションを使用

これもシンプル

ただ、アニメーションを1から設定ってあまりやったことなかったので
いろいろと四苦八苦
特に同じ動作をするものを角度違いで3つ用意しないといけず
設定を間違えて、全然違う挙動をしたり
この辺は経験を積むしかなさそうですね・・

④景品の獲得

最後に問題になったのが、景品の獲得
アームでつかんで持ち上げることはできるものの、クレーンが戻る際に
慣性が働かないので下へスポッと落ちる
そこで解決方法として、2Dゲームの『動く床』を参考にしました

その方法は
【クレーンの特定のオブジェクトにTriggerを設定して
     isTriggerで子オブジェクトにする】

ちっちゃいコライダーを用意


親の親につける。でないと後述の方法の際にバグが起きる

クレーンのアームが開いても、親子関係が解除されず落下しないというバグがはっせいしたため
GetColliderをsetActive(false);にすることで、無理やり解除することに成功

【まとめ】

・ゲームは必ずしも現実の物理法則にそぐわなくてもよい

はじめは、リアルな3Dゲームを作るため物理演算にこだわっていました
しかし、作り進めていくとゲームシステムの物理演算の脆弱性を知りました
ユーザーにとってリアリティがそのゲームに必要かどうか
見極めていき、目標とする体験を実現するためには何が必要か
それを工夫していくことが大切なんだなぁと、実感しました

いいなと思ったら応援しよう!