【Unity】Ariadne – 3D Dungeon Makerを1.5.0にアップデートしました
- 2020.11.13
- アセット
- 3DダンジョンRPG, Asset, Unity
3DダンジョンRPGのダンジョン部分を作ることができるEditor拡張系アセットの『Ariadne – 3D Dungeon Maker』を1.5.0にアップデートしました。
前のバージョンが1.0.1だったのにいきなり1.5.0にするのは結構勇気がいりました(笑)
もっと柔軟に3DダンジョンRPGを作れるようなアセットを目指して、ユーザーさん側でカスタマイズできる部分を作り込んでシステムを大改造しました。このページでは1.5.0での改善点や変更点について紹介します。
Ariadne – 3D Dungeon Makerとは
『Ariadne – 3D Dungeon Maker』は私が作ったEditor拡張系、システム/テンプレートのアセットで、3DダンジョンRPGのダンジョン部分を作ることができるものです。
RPG部分(敵との戦闘など)については他のアセットもあるのでそちらと統合してもらうことを想定していて、このアセットでは3DダンジョンRPGの舞台として使う3Dダンジョンの生成や移動の制御、ダンジョン内のイベントの制御を行っています。
RPGのシステム部分は開発者のオリジナリティも発揮される部分でもあるので、現段階ではアセットに含めていませんが、いずれはそこまでカバーしてこのアセットだけでも3DダンジョンRPGのシステムを作れるようにしたいと考えています。
元々このアセットを作り始めた理由としては、3DダンジョンRPGが好きだから、というそのまんまな理由です(笑)
優れたアイディアを持っている人にこのアセットを使ってもらって、楽しい3DダンジョンRPGを作ってもらってそれを遊ぶという野望もあります。
どんな感じのシーンが作れるかについては、以下のページからデモシーンを遊んでみてください。
このシーンはサンプルとして同梱している素材を使っていますが、ダンジョンのパーツを切り替えることでオリジナルのダンジョンを作成できます。アセットストアにある建物の3Dモデルを使って3DダンジョンRPGの舞台を作ることもできるので、素材を手に入れればいくらでもあなたオリジナルのダンジョンを作ることができます。
大きな変更点
大きな変更点として、次のものがあります。
- サポートするUnityのバージョンをUnity2018.1以降に変更
- アセット内のスクリプトでコーディング規則をMSDNのものに準拠
- マップ属性の定義方法を改良
- イベントシステムの改良
それぞれについて紹介します。
サポートするUnityのバージョンをUnity2018.1以降に変更
1.0.xのときにはサポートバージョンがUnity2017.2以降になっていましたが、1.5.0からUnity2018.1以降に変更しました。
これはUnity2017.4のLTSの期限が2020年の4月に終了したことが主な要因です。
さらに、私が開発している環境がmacOS 10.15なのですが、このOSバージョンだとUnity2017のエディタを開くことができないため、開発環境の影響もあってUnity2018.1以降としています。
アセット内のスクリプトでコーディング規則をMSDNのものに準拠
このアセットにはスクリプトが含まれています。UnityではC#を使っていますが、以前のコーディング規則がJava風だったため、これをC#風に変更しました。
コーディング規則はMicrosoft社のMSDNで公開されている規則に基づいて変更しています。C#を開発したMicrosoft社のコーディング規則であれば多くのユーザーさんとも親和性が高いと考えています。
私が最近のプロジェクトで使っているのがこのコーディング規則なので、保守性・サポートのしやすさを考えて変更しました。
マップ属性の定義方法を改良
機能面ではマップ属性の定義方法を変えたのが大きな変更です。Ariadneではダンジョン内の各マスにマップ属性と呼ばれるものを割り振って、このマスには壁オブジェクトを配置、このマスには宝箱を配置、といったように属性に応じてオブジェクトを生成できるようにしています。
恥ずかしい話なのですが1.0.xの時代は定義をスクリプトに記載するようにしていました。これだとアセットのアップデートでデータが上書きされる危険もありますし、柔軟性に欠けます。
この点を改良し、専用のEditorウィンドウを使って値を定義できるようにしました。
スクリプトをいじる必要はなく、この画面でマップ属性を定義していくことができます。データについてはシステムデータとユーザーデータを分離しているので、Ariadneがアップデートしたときにも上書きされる危険はありません。
また、追加したマップ属性に対応したダンジョンパーツをセットするためのウィンドウも作成してあるので、より柔軟にダンジョンを作ることができます。予めPrefabとしてパーツデータを作成しておき、ここにセットすることでゲームの実行時にAriadneがインスタンス化します。
イベントシステムの改良
イベントのシステムについても変更を行いました。
各マスでは複数のイベントパーツを保持することができ、その中でさらにイベントプロセスと呼ばれる処理の流れを保つことができます。イベントプロセスひとつひとつで処理を行うため、イベントプロセスをリスト形式で保持することでメッセージを表示する、アイテムの増加処理をする、主人公オブジェクトを一歩前に動かす、といったように複数の動きを組み合わせて順番に処理することができます。
このイベントプロセスの中で実際に処理を行うスクリプトについては、イベントカテゴリーとして定義します。これにより、同じスクリプトを使って別の引数を渡す、という処理が可能になります。
イベントで使うスクリプトをアタッチしたPrefabをイベントカテゴリーと対応させることで、ゲーム中に対応するPrefabをインスタンス化してその中の処理を実行します。
スクリプトで使う引数については、その型をイベントカテゴリーの定義で決めておき、イベントエディタの中でその型に対応した値を入力することができます。
使用する引数の型についてもユーザーが定義できるようになっています。システムデータとしていくつか定義していますが、これ以外にも追加できるようになっています。
よもやま話
このあたりはアプデ情報に直接関わりのない個人的な話なのですが、イベントまわりが今回一番頭を使いました。
個人でゲームを作る場合は最初に仕様を決めてゴリゴリ作っていけますが、ユーザーが自由に動きを作っていくことを考えるのはまた違った組み方が必要で、かなり悩んだんですよね。
特にスクリプト内で使う値をエディタからセットするのは難しい部分でした。ユーザーがどんな型を定義するか分からないのにその値をどうやって保持するようにしたらいいんだろう……? なんて行き詰まりを感じる日もありました。
最終的に値型のクラスについては全てstringにキャストして保持して、参照型のクラスは基底クラスのObjectとして保持するようにしました。スクリプト内で使用する際は適切な形にキャストして使ってもらうことで値を渡せるようにできたのが個人的にすごく嬉しかったです。定義した値の数だけフィールドを追加してもらおうかとも思ってましたからね(笑)
こう考えると、Unityでは開発者の数だけ違ったゲームを作ることができるというのは本当にすごいことですね。Unityエンジンの開発チームには頭が上がりません。
今後のアップデート予定
今後のアップデート予定ですが、ゲームの実行時に動的にダンジョンを生成するのに加えて、事前にシーンとして作成しておくPre-Bake(プレベイク)モードを導入しようと思っています。
ダンジョン内のパーツをstaticなオブジェクトとして予め作成しておくことで、ライティングをベイクすることができるためです。事前に用意しておけばポストプロセシングと組み合わせて調整するのも簡単ですからね。
また、HDRP、URPについても対応をしていく予定です。この部分は新しいバージョンのUnityで使う上では大切な部分なのでなるべく早めに進めていきたいと思っています。
おまけ: 「独身の日」セール
Unityのアセットストアでは毎年11/11近辺で「独身の日」セールを行っています。中国では11/11が独身の日と呼ばれているようで、この日にお祭りを行うそうです。
以下のキャンペーンページに記載されているクーポンコードを使うことで4000点以上のアセットが50%オフになります。実は『Ariadne – 3D Dungeon Maker』もこのセールの対象になっているので、よかったら覗いてみてください。
実はこのセールが始まる直前にアップデートを提出するという無茶なスケジュールでしたが、なんとかセール期間中にアップデートの審査が終わって良かったです。
→2020/11/14追記
このセールは終了しました。
まとめ
『Ariadne – 3D Dungeon Maker』を大幅にアップデートしたのでその変更点についての紹介でした。超ニッチなアセットではありますが、多くの人がダンジョンRPGを作ってくれる日を夢見て引き続きアップデートしていきたいと思います。
良かったら以下のページからデモシーンを遊んでみてください。
ゲーム開発の攻略チャートを作りました!
-
前の記事
ゲームを遊ぶのは「人」なのでユーザーを意識しよう【ゲーム開発】 2020.11.12
-
次の記事
ゲームを作り続けるには健全なメンタルを維持することが大事【ゲーム開発】 2020.11.13
コメントを書く