『ユニテのひみつ』のひみつ 5 ??????

先日、RPG MAKER UNITEで作成したスマホ向けのアプリ『ユニテのひみつ』をリリースしました。

Android
https://play.google.com/store/apps/details?id=jp.windbellrrr.app.unite.basic

iOS
https://apps.apple.com/app/secret-of-unite/id6450209741

本エントリは『ユニテのひみつ』作る際に、どのような改造をUNITEへしたのか、また、どんなアドオンを作成したのかを、何回かに分けて解説していく内容の第五回となります。

今回の内容は完全にネタバレなので、まだ『ユニテのひみつ』をプレイされていない方は遊んでから読んだ方がいいかもしれません。

 

 

『ユニテのひみつ』の構成

『ユニテのひみつ』はとにかく作りきることを目標にして作り始めたので、あまり長い内容にするつもりは初めからありませんでした。
いくつかミニゲーム的なものを作って終わり、というのを考えていました。
そして最終的には以下のような構成になりました。

・導入デモシーン
・脱出ゲーム
・おいかけっこ(敵に触れないようにマップ内を探索)
・パズルゲーム
・ローグ風ミニRPG

最後のもの以外は、普通にUNITEのイベントだけで作成しています。
そして最後のものは、専用のアドオンを作成し、実現しています。

ローグ風ミニRPGとは?

最後のミニゲームである「ローグ風ミニRPG」は、ゲーム内では「ユニテの塔」というダンジョンとして表現しています。
これは、各フロアにだいたいひとつ置いてある看板に書かれた「ひみつ」を集めていくミニゲームです。
集めたひみつは大事なアイテムとして管理され、地上に戻ることで持ち帰ることができます。
ただし、ダンジョン内ではセーブができないので、注意深く探索する必要があります。
全てのひみつをあつめてから地上へ戻ると、クリアフラグが立つようになっています。

「ユニテの塔」は、入る時に毎回レベルがリセットされます。
また各フロアは、訪れるごとに形の変わる、いわゆる不思議のダンジ●ン形式になっています。
各フロアには下り階段、登り階段、地図、敵、宝箱などがランダムに設置され、登り階段まで到達すると、上の階へと進むことができます。
地図はそのフロア専用のアイテムになっており、取るとミニマップでフロア全体を見渡すことができるようになります。

以下では、この「ローグ風ミニRPG」用に作ったアドオンを説明していきます。

ダンジョンマップを管理するアドオン

私は自動生成されるダンジョンが好きなので、UNITEでもそういうのをやってみたいと思い、専用のアドオンを作成しました。
このアドオンでは、マップデータを作成・管理しています。
アドオンの設定画面では、マップの幅や高さ、分岐のしやすさ、デバッグモードの設定ができるようになっています。

アドオンの設定項目

アドオンの設定項目

このアドオンが作成するマップは、いわゆるWizardryのような「壁に厚みがない」タイプのマップです。
分岐のしやすさというのは、マップを作る際、スタートからゴールまでのルートを作成する際に、どれだけ途中で分岐しやすいかというパラメータです。
数値が高いほど、横道が多いマップができます。
マップの大きさは最初5x5でやっていましたが、そうすると結構1フロアの探索時間が長くなってしまうため、4x4に調整しました。

アドオンコマンド

アドオンで作成したイベントコマンドは、以下のような感じになっています。
※作成したものの実際には使用しなかったものも含んでいます

・CreateMap:マップを作成する
・GetMapWallData:指定位置の壁データ(0~15の値)を取得する
・SetMapWallData:指定位置の壁データを設定する
・GetMapTypeData:指定位置の部屋の種別(数値)を指定する
・SetMapTypeData:指定位置の部屋の種別(数値)を設定する
・GetCurrentMapWall:現在の部屋の壁の情報(0~15の値)を取得
・GetCurrentMapType:現在の部屋の種別(数値)を取得
・MoveUp / Down / Left / Right:現在位置を上下左右に移動する
・SetTypeRateEmpty:空のマスにランダム設定する種別と確率を設定
・SetTypeRateDeadEnd:行き止まりのマスにランダム設定する種別と確率を設定
・ResetTypeRateEmpty:空のマスにランダム設定する内容をリセット
・ResetTypeRateDeadEnd:行き止まりのマスにランダム設定する内容をリセット
・ShowMap:ミニマップを表示する
・HideMap:ミニマップを非表示にする
・BreakWall:指定方向の壁を壊す
・SetMapType:現在の部屋の種別を設定する
・SetHaveMap:マップの所持状態を設定する
・SetBranchPercent:マップの分岐しやすさを設定
・GetMapWidth:マップの横幅を取得する
・GetMapHeight:マップの縦幅を取得する

壁データは、0~15の値、つまり4bit=2進数で4桁の数値です。
各ビットの状態が上下左右のどれかの壁の有無を表しています。

部屋の種別は、その場所に何があるかを示す任意の数値です。
意味は、0=なし 1=スタート 2=ゴール 3以降は任意、となっています。
『ユニテのひみつ』では、3以降を以下のように定義して扱っています。
3:鍵 4:宝箱 5:敵 6:回復の泉 7:地図 8:看板
これらの種別は、SetTypeRateEmpty と SetTypeRateDeadEnd でそれぞれ出現確立を設定できます。
ResetTypeRateEmpty と ResetTypeRateDeadEnd で確率をリセット後、各種別ごとに確率を設定してから、CreateMapを実行することで、各階のマップを自動生成しています。

ミニマップについて

ミニマップ

ミニマップ

ミニマップはTextMeshProの画像を文字として表示する機能を使っています。
ミニマップ用に作成した画像は以下のようなものです。

ミニマップ用フォント画像

ミニマップ用フォント画像

上半分がミニマップ用の床と壁の画像です。
下半分が部屋の中身を表すアイコン画像になっています。
一番右下の黒い部分は、「未踏のエリア」用の画像です。

この画像の作成には、以下のサイトを参考にさせていただきました。ありがとうございます。
https://kan-kikuchi.hatenablog.com/entry/TextMeshPro_SpriteAsset

部屋の表現について

ダンジョンの部屋は、一枚の小さなマップで表現されています。

ダンジョン用のマップ

ダンジョン用のマップ

上下左右の壁はイベントとして作ってあります。
アドオンのコマンドで現在位置の壁データを取得後、それぞれの方向に壁があったら壁を表示し、カギを持っていたら壁の代わりにドアを表示する、みたいな感じで部屋を表現しています。
壁の外側には、移動先の部屋へと遷移するためのイベントが仕込んであります。
水晶玉?は広告のロード状態を表すイベント画像です。
マップの中央にあるのは、部屋の種別に応じた処理を行うためのイベントです。

マップ中央のイベント

マップ中央のイベント

種別の分だけページがあるイベントになっています。それぞれのページで種別ごとの内容を処理しています。
ページ2は下り階段用のイベントで、地上に戻るかどうかを尋ね、「はい」が選択されたらフェードアウトや回復処理などをはさんだ後、インタースティシャル広告を表示しています。

終わりに

最後のミニゲームは、アドオンでなければ実現できないものをと考え、作成しました。

このアドオンは、もったいないので次回以降のゲームでも利用しようかと思っています。
本当はWizみたいな3DダンジョンRPGが作りたいんですよね。
ぽん太さん(ponAppさん)の3Dダンジョンのアドオンはリリース日に購入済みなので、うちのアドオンと合体&魔改造してWiz風ダンジョンRPGが作れないかな……なんて考えていたりします。

ponAppさんの3Dダンジョンのアドオン
BOOTH:https://ponapp.booth.pm/items/4807257
DLsite:https://www.dlsite.com/home/work/=/product_id/RJ01063009.html