![見出し画像](https://assets.st-note.com/production/uploads/images/157195509/rectangle_large_type_2_192c907551441dba61620c605ea6e5c3.png?width=1200)
UnityでUFOキャッチャーを作ろう
【はじめに】
Unity PathwayのJuniorProgrammer講座提出用の題材が
UFOキャッチャーに向いていたので、作ろうと決意
【UFOキャッチャー要素】
①クレーンの移動
移動に関しては物理演算を使わず、『transfrom.Translate』 を利用して
稼働するようにしました。
![](https://assets.st-note.com/img/1728371312-3ftVJDOAMKLaCq917Q6r4wWI.png?width=1200)
物理演算を使わない理由は
【アーム部分にRigidbodyを利用するため
子オブジェクトのアーム部分が追従しない】です
はじめは、Jointを利用してアームを作っていたのですが
そうすると、クレーン本体が移動するとjointをアタッチしたパーツが移動
しませんでした。
普段3Dゲームを作らないものだから、全然知りませんでした・・・
いろいろやれば追従するんだろうけども、難易度が高そうなので見送り
②アームの降下
アームの降下に関しては、各可動の間を意識して作成しました
ここで威力を発揮したのが『DOtween』
![](https://assets.st-note.com/img/1728371157-Zw4D3uSaO9CQMNPtbgRU0nEs.png?width=1200)
便利ですよね、DOTween
まだまだ全然使いこなせませんが、「指定した箇所へ、何秒で移動」
を実行するならこれ以上に便利なものもない
ただ、何も考えずにほいほい動作を足すと、ネストが深くなるので
もっとちゃんと作れるようにしていこうと思う
③アームの稼働
はじめはjointを利用しようと思っていましたが、前述のとおり移動するオブジェクトと相性が最悪だったので、アニメーションを使用
![](https://assets.st-note.com/img/1728371407-D9wnKhsdMt4oOCFePcx3YLz8.png?width=1200)
ただ、アニメーションを1から設定ってあまりやったことなかったので
いろいろと四苦八苦
特に同じ動作をするものを角度違いで3つ用意しないといけず
設定を間違えて、全然違う挙動をしたり
この辺は経験を積むしかなさそうですね・・
④景品の獲得
最後に問題になったのが、景品の獲得
アームでつかんで持ち上げることはできるものの、クレーンが戻る際に
慣性が働かないので下へスポッと落ちる
そこで解決方法として、2Dゲームの『動く床』を参考にしました
その方法は
【クレーンの特定のオブジェクトにTriggerを設定して
isTriggerで子オブジェクトにする】
![](https://assets.st-note.com/img/1728371859-IXqBFnxR8r1oC5g27AQ6iTcS.png?width=1200)
![](https://assets.st-note.com/img/1728372020-BiuOmJMbcUAeHRp9s2j68gVh.png)
クレーンのアームが開いても、親子関係が解除されず落下しないというバグがはっせいしたため
GetColliderをsetActive(false);にすることで、無理やり解除することに成功
【まとめ】
・ゲームは必ずしも現実の物理法則にそぐわなくてもよい
はじめは、リアルな3Dゲームを作るため物理演算にこだわっていました
しかし、作り進めていくとゲームシステムの物理演算の脆弱性を知りました
ユーザーにとってリアリティがそのゲームに必要かどうか
見極めていき、目標とする体験を実現するためには何が必要か
それを工夫していくことが大切なんだなぁと、実感しました