ゴマちゃんフロンティア

アザラシが大好きなエンジニアの開発日記です

【開発日記】「リスとアザラシのゲーム」開発進捗の紹介 (その2)

time 2020/06/15

今回は開発中のゲームの紹介第2弾です。
タイトルも決まってなければゲームシステムもフニャフニャな行き当たりばったり開発ですが、記録も兼ねて紹介できるところは紹介していきますよ!

前回の記事はこちら

【開発日記】「リスとアザラシのゲーム」開発進捗の紹介

主に変えたこと

移動制御をNavMeshベースに変更

今までプレイヤーはCharacterControllerで、敵とアザラシはRigidbodyで移動させていましたが、これをどちらもNavMeshベースの制御に切り替えました。
主な理由は以下の2点。

  • ステージの移動範囲の制御が楽なため
  • Rigidbodyベースだと障害物の迂回が面倒なため

移動範囲の制限は今まで「コライダーを反転させる」ことで実現しました。

【Unity】「ある地点から一定範囲内に移動を制限する」をColliderの反転で実現したお話

しかしこのやり方、MeshColliderが使えないので、どうしても「単純な移動制限しかできない=単純な地形しか作れない」わけですね。
で、そもそも物理演算を使いたい場面もあまりないので、NavMeshに寄せたほうが楽だろうと判断しました。

障害物の迂回はシンプルで、NavMeshAgentで経路計算させたほうが楽だからです。というか自前だとかなり大変そう。

ちょうど前回のunity1weekではNavMeshを使って移動制御をしていたので、割とすんなり切り替えれました。
unity1weekに参加する度に開発の選択肢が増えていきます。試したことをすぐ実践に組み込める、とてもよい流れですね。

移動制御をRigidbodyベースに変更

すぐ上に「NavMeshに変えた」って書いてあるけど?

はい。NavMeshに変えた後でまたRigidbodyに変えました。
フニャフニャ設計ここに極り。

というのは、3D空間を360度動けるのは自由度が高い反面、操作が難しくなりがちです。
このゲームは画面タップでアザラシへの指示を行う想定のため、どうしてもバーチャルパッドを使わざるを得ません。
しかし実際プレイすると、まあ操作しにくいわけですね。特に上下にパッドをスライドさせるのが思った以上に大変。

ということで考えた結果、開き直って「ゲーム的には2D」「見た目的には3D」な方向に倒すことにしました。

3Dと比較して操作が簡単になり、ステージ設計やNPCキャラのAI制御も楽になりました。
特にアザラシへの指示がしやすいです。「どの敵を狙うか」は左右へのフリックだけで十分だし、上下へのフリックで別の指示も出せそうです。
一方でゲームとしての自由度やステージの多様さは犠牲になった感じですが、スマホゲーだしある程度は妥協かなーと思います。

でもNavMeshのままでも、`Move()`で2次元の移動だけにすればいいんじゃないの?

それも考えたのですが、NavMeshAgent同士がぶつかった際に容赦なくずれるのが私の知識では解決できず断念しました。
反面、RigidbodyならFreezePositionでラクラク制御できますね。

メニューUI

さすがに素っ気なさ過ぎたので、背景やボタン配置を見直します。

背景は以前友人に描いていただいたイラストを使用しています。水彩風で良いです。
ただこれはブログ用に描いてもらったものなので、いずれはこのゲーム用に誰かにお願いしたいですね。

細かいところでは、選択中のアイテムの背景色を変えたり、装備中・設定中のアイテムにアイコンを表示したり。

これでメニュー画面の見た目やユーザビリティはマシになりました。

リスの装備

↑でちょっと出ましたが、リスの杖と服を切り替えられるようになりました。
パラメータはもちろん、装備によって見た目も変わります。

またモデルをドラッグすると左右に回転できます。

杖と服のパラメータはJSONで管理しています。
セーブデータに「今装備している杖or服のid」を保存しており、ゲーム開始時にロードして用意し、キャラの初期化やダメージ計算などに反映します。
しかし最近ScriptableObjectをやっと知ったので、いずれはそちらで管理させたいです。

杖はidに対応するモデルを作っておき、手のboneの子オブジェクトとして設定します。
服はNestedPrefabの仕組みを利用し、「ベースとなるリスの本体」の子に「服のモデルのプレハブ」を設定。
共通のArmatureを使用するためSkinnedMeshRendererのAvaterをベースのものにし、boneの情報もベースの服からコピーしました。
bone配列はインスペクター上からは見れないため、以下のページを参考にしてコピーするエディタ拡張を作成しました。
https://answers.unity.com/questions/1442963/how-to-re-apply-a-mesh-to-an-armature.html

リスの魔法

主人公のシルリスは「魔法が使えるリス」という設定でしたが、今までは杖で叩くことしかできませんでした。
さすがに設定無視もいいところだったので、ようやく魔法を実装しました。

とりあえず王道のファイアボールから。
エフェクトはこちらの記事を参考にさせていただきました。
http://ktk-kumamoto.hatenablog.com/entry/2015/04/13/214449

魔法は設計が難しいですね。
攻撃魔法だけならともかく、回復やバフ・デバフも想定するとかなり大変。
というか未だにどう実装するのが綺麗か結論がでていません。攻撃魔法だけなら使えるようになりましたが、後々破綻しそうな予感。
まあ悩んで進まないほうが問題なので、とりあえずこのまま開発を進めます。

GooglePlayへのテストリリース

テストプレイとリリースの練習を兼ねて、GooglePlayへデベロッパー登録を行い、内部テスト版をリリースしました。

リリースビルドで詰まる場面はあまりなかったです。ぐぐってヒットした情報で十分でした。
しかしウワサのIL2CPPのビルドが超長いのがきついです。「バージョンを上げずにビルドしてしまってやり直し」な流れが何度かありました。
そういう意味ではCloudBuildとかうらやましい。

ちなみにスマホのスペックごとの差異を確かめたいという建前で、地元の友人にプレイさせたのですが、かなり微妙な反応をされたりしました。

しかし私のモチベーションの根幹は「マイキャラとアザラシを世の中に出してあげたい」です。
ちょうど2D寄りに倒すと決めてからまたやる気が出てきたので、本業の稼働が安定しているうちに作り直してしまいたいところ。

あとがき

そんなわけで、「リスとアザラシのゲーム」の開発進捗を紹介しました。
今のところ「3歩進んで2.5歩下がる」くらいのペースですが、今後もせっせと作っていきますよ!
開発が進んだらまた記事にするのでお楽しみに~!

down

コメントする