読者です 読者をやめる 読者になる 読者になる

エディトリアルデザイナーのアプリ制作日記

Unityで遊ぶ個人開発者のメモ書き

Unityアクションゲーム制作記 その20 アイテムを放出する宝箱を実装

youtu.be

 ダンジョンといえば宝箱! ということで、ここのところはずっとアイテム関連の実装を粛々と進めていました。かねてより「入れなきゃ」と思い続けていたものにようやく着手できました。

 まず、アイテムを管理するためには、どんなデータが必要かなぁとスプレッドシートとにらめっこしながら考えてみたのがコレ↓

f:id:hamazakifactory:20170307181053j:plain

・itemID:アイテム固有のID番号

・category:分類用のカテゴリID(武器強化系、プレイヤー強化系、便利系など)

・categorySub:さらに利用用途に応じて分けたサブカテゴリ

(便利系>サブ1:ゲーム開始時使用可能、サブ2:コンティニュー時使用可能とか)

・itemCount:現在所持しているアイテム個数

・Ui3DItemObject:UI表示用の3Dオブジェクトのプレファブ名。

・itemuUseMethod:IDのアイテムを使用した時に必要な処理をするメソッド名。

・itemName:表示用アイテム名、翻訳ベースの英語をここで登録。

・itemDescription:アイテム説明文。

 いろいろと不要っぽいものがあったりしますが、当座はコレで大丈夫かな。次に宝箱を開けた時に、どのアイテムが入っているかどうかのテーブルを用意しました。1つの宝箱には8個のアイテム+GOLDが入っているという仕様です。

f:id:hamazakifactory:20170307182238j:plain

 宝箱にTableIDを紐付け、アイテムを入手(宝箱から放出)する時には、紐付けられたIDを指定することで、出すべきアイテムがわかるという感じです。個数だったり、落とす確率を指定できたりと細かく設定するのも考えましたが、やったところでゲーム全体のバランスを考えた調整など、おそらく自分の手には余りそうだったため、必要最低限のデータ構造でいくことにしました。

 宝箱を開けてアイテムを入手するまでに必要な流れは、以下の通り。

  1. 宝箱の判定に触れる
  2. 宝箱をフォーカスしつつ、開けるかどうかのメニューを表示
  3. 開けるボタンが押されたら、宝箱を開けてアイテムを放出
  4. アイテムを入手 

  まあ、ごく自然な当たり前の処理です。しかし、ここで頭を悩ませたのがアイテムを入手する方法と、入手しようとしたアイテムが最大所持数を超えていた時の処理です。せっかくアイテムの3Dオブジェクトを散らすのですから、走り回って拾い集める方式が常套手段でしょう。でも、走り回るのは手間……しかも、拾ったアイテムがどんなアイテムかがわかるメッセージが必要です。残念ながらログシステムといった気の利いたものもないので、ただ拾い集めるだけでは、プレイヤーが何を拾ったのかが全くわかりません。かといって1個アイテムを拾うごとにメッセージと選択肢を出して確認したりするのは現実的ではありません。ということで、しばし悩んだ末、宝箱から出た入手できるアイテムは、開けた後にまとめて表示するようにしました。スクロールビューでくるくる動かすと、アイテムのプレビューモデルも見られるようにもしてあります。ゲームを再開するまでに1アクション必要ですが、必要な情報を確実に見られる方を選択してみました↓ 

f:id:hamazakifactory:20170307184555j:plain

  で、もう1つの問題、入手しようとしたアイテムが最大所持数を超えていた時の処理です。問答無用で廃棄してしまうのが制作側としては楽なのですが、MOTTAINAI精神が頭をもたげ……結局宝箱から放出したアイテムのオブジェクトを残しておき、後で必要になった時に拾い直せるような形にしました。とはいえ、エリア移動(シーンの再構成)すると消えますけどね。これは仕方ないってことで諦めてます。

 ということで、アイテムが使えるようになってから、ゲームオーバーやらトップメニューやらのUIを改修していたのですが、とにかくデザインがまとまらない! 時間ばっかりとられて、ちょっと疲弊気味です。なるべく手順を少なく、画面遷移もしないように簡単にしたい、と要素を詰め込みすぎている、かつ、文字情報が多すぎるのが原因なのですが……。 5.5インチのZenfone2では問題なくても、4インチのiPhone5では、両目視力1.0でもかなりきつくなっています。また、ちょっと自分流が出すぎて使いづらいものになりつつあるのかなぁと、少し反省。

 いまから根本的に叩き直すのは現実的ではないので、どこかいい落とし所を探しつつ、やりたいことを詰め込めるように頑張っていこう、うん。