【Unity】AriadneのイベントをカスタマイズするEventCategory

【Unity】AriadneのイベントをカスタマイズするEventCategory

todoでございます。

『Ariadne – 3D Dungeon Maker』という3DダンジョンRPGのダンジョン部分を作れるアセットをアセットストアで公開していて、イベントをカスタマイズしていく部分について紹介します。

3DダンジョンRPGではダンジョン内のイベントもたくさん盛り込みたいところ。例えば世界樹の迷宮では、他の冒険者の痕跡を感じられるフレーバーテキストがあったり、可愛らしいリスとの触れ合いイベントがあったりします(すっとぼけ)

こうしたイベントは、Ariadneの中ではイベント用スクリプトを作成することで自由にカスタマイズできます。引数の定義をしておくことで、イベントを編集するウィンドウであるEventEditorでそのイベントに渡す引数の値を入力することができます。例えばどのアイテムIDを何個増やす、あるいは減らすといった処理も可能になります。リスのように脱出用アイテムを奪い去っていくイベントも作れます(笑)

 

 

Ariadne – 3D Dungeon Makerとは

『Ariadne – 3D Dungeon Maker』は私が作ったEditor拡張系、システム/テンプレートのアセットで、3DダンジョンRPGのダンジョン部分を作ることができるものです。

RPG部分(敵との戦闘など)については他のアセットもあるのでそちらと統合してもらうことを想定していて、このアセットでは3DダンジョンRPGの舞台として使う3Dダンジョンの生成や移動の制御、ダンジョン内のイベントの制御を行っています。

RPGのシステム部分は開発者のオリジナリティも発揮される部分でもあるので、現段階ではアセットに含めていませんが、いずれはそこまでカバーしてこのアセットだけでも3DダンジョンRPGのシステムを作れるようにしたいと考えています。

元々このアセットを作り始めた理由としては、3DダンジョンRPGが好きだから、というそのまんまな理由です(笑)

3DダンジョンRPGを作りたいなーと思っている人にこのアセットを使ってもらって、楽しい3DダンジョンRPGを作ってもらってそれを遊ぶという野望もあります。

どんな感じのシーンが作れるかについては、以下のページからデモシーンを遊んでみてください。

このシーンはサンプルとして同梱している素材を使っていますが、ダンジョンのパーツを切り替えることでオリジナルのダンジョンを作成できます。アセットストアにある建物の3Dモデルを使って3DダンジョンRPGの舞台を作ることもできるので、素材を手に入れればいくらでもあなたオリジナルのダンジョンを作ることができます。

 

1.5.0にバージョンアップしたテンションで書いた記事がこちら。

 

Ariadneのイベント制御

Ariadneではそのフロアに入ったタイミング、そのマスに入ったタイミングなどで実行するイベントの有無を確認しています。例えば宝箱のイベントを設定していた場合、宝箱の目の前に立ったらイベント開始ボタンを表示するイメージです。

イベントを実行する仕組みはEventProcessorというスクリプトで実装していて、このスクリプトの中でイベント用スクリプトがアタッチされたPrefabをインスタンス化して個別のイベントを実行しています。

仕組み部分は特に意識することなく、イベント用スクリプトを切り替えることでカスタマイズを可能にしています。

イベント制御についてはこちらの記事もご覧ください。

 

イベントのカスタマイズ

イベントにおける個別の動作はイベントプロセスという単位で制御しています。下の画像はイベントデータを編集できるEventEditorの画面で、画像右下あたりの水色の部分がイベントプロセスの設定になっています。この画像だとイベントプロセスはひとつですが、宝箱が開くアニメーションを再生して、アイテムを増やす処理をして、といった感じで複数のイベントプロセスを保持することができます。

EventEditor
EventEditor

 

各イベントプロセスではイベントカテゴリーを設定します。このイベントカテゴリーでは、どのスクリプトを使うか、どんな型の引数を使うか、といった定義データがあります。

EventCategoryの設定
EventCategoryの設定

 

この画面で『Prefab Object』として設定するPrefabにイベント用のスクリプトをアタッチして、実行時にそれをインスタンス化して実行しています。

自分で作るプロジェクトだったらスクリプト内で分岐させるのも手ですが、このアセットでは多くの人が自由にカスタマイズするという観点でこのようにシステムを組んでみました。

画面上から引数を設定する仕組みなどは結構頭を悩ませた部分で、リアルで2, 3日思い悩みました。あーでもない、こーでもないと試行錯誤していたのは開発者の醍醐味だったと思います(笑)

 

引数の型の定義

イベントカテゴリーでは引数の型を定義することができます。イベントの種類によってint型の引数を渡したかったり、string型の引数を渡したかったりするので、これを定義できるように専用のウィンドウを用意しています。

引数の型を決められる
引数の型を決められる

 

ここではEventCategoryのウィンドウで表示する名前と、実際の型名を両方設定するようになっています。使用が想定される型はいくつか事前に定義していますが、これ以外にも追加していくことができます。

この定義はEventEditorでデータをセットする際に使うもので、型に応じたフィールドをEventEditorのウィンドウで表示するために使用しています。

 

イベント用スクリプトの概要

イベント用スクリプトでは、イベント用のクラスを継承して、さらにイベント用のインタフェースを実装することで指定したメソッドが存在する状態になっています。

このメソッドをEventProcessorという制御用スクリプトから呼び出すことで実際の処理を行っています。

この辺りのカスタマイズ方法はマニュアルに『EventGuide』という形で含めているので、これを見つつカスタマイズしてもらえるようになっています。

 

まとめ

このページでは『Ariadne – 3D Dungeon Maker』という3DダンジョンRPGのダンジョン部分を作れるアセットについて、イベントをカスタマイズしていく部分について紹介しました。

ダンジョン内のイベントはそのゲームを彩る重要なパートなので、自分で言うのもアレですが、この部分をより柔軟にできたのはうれしかったです。

こんな感じのAriadne、良かったらデモシーンを遊んでみてください。

 

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!