ConversationGraphとは
私が開発した、ノードベースで、RPGやノベルゲームで使われる会話を簡単に作れるUnity Packageです。
コンセプト
バージョン管理もできるエンジニアとデザイナーが手軽に連携して会話シーン作れるシステム
利用想定ゲームジャンル
RPG, 3Dアクションなど。
今後ノベルゲームなどに対して有効な手段を追加予定です。詳しくは後述します。
リポジトリ
ごめんなさい!
現在ConversationGraph-v2と称してコードを1から書き直しています。
そのためリポジトリは非公開となっています。
特徴
1.独自のプロパティシステム
HasConversationPropertyとConversationPropertyという2つの属性が用意されており、これを静的なプロパティもしくはフィールドに付与するとプロパティとして登録されます。
ConversationGraph中のテキストに{PropertyName}とすると、会話時にプロパティの値に置換されます。
また、Bool型のプロパティはノードとしても使用でき、Branchノードでフラグ管理をすることができます。
この属性を用いたプロパティシステムはほかのGraph系ツールにはありません。(たぶん)
Unity 6でリリース予定のUXMLの機能と似ているかもしれません。
2.互換性の高いSubGraphシステム
このパッケージにもShader GraphなどのSubGraphと同じような仕組みが導入されています。
ただし、このパッケージにおけるSubGraphは専用のアセットがあるわけではなく、同一アセット以外のすべてのConversationGraph AssetがSubGraphとして利用できます。
SubGraphの多重入れ子関係も可能です。
3.サポート
Input Managerだけでなく、Input Systemに対応しています。
当初はUI Toolkitの対応も考えましたが、TextMeshProのアニメーションに対応していなかったので、対応を見送りました。
アニメーションに対応次第検討します。
4. スッキリとしたグラフ
なるべくノード数が少なくなるように一つのノードで複数のテキストを持てるなどの工夫がされています。
5.アニメーションシステム
MagicTweenを利用したアニメーションシステムを搭載しています。
また、ソースジェネレーターも利用しており、こだわりポイントです。
今後の展望
GraphのUXについて
今後は、Unityはノードベースツールの開発システムである「GraphTools Foundation」の開発をしています。
正式にエディターに組み込まれた際はこれに移行し、より深くノードツールを発展させようと考えています。
現在は、なるべく依存性を下げるためGraphView(現在組み込まれているノードベースツールの開発システム)に深く足を入れないように開発しています。
これによって以下の機能の実装を見送りました。移行次第実装します。
- グラフでプロパティなどを編集した際に変更されたことにならない(=閉じるときに警告が出ない)
- SubGraphをクリックするとそのGraphAssetを別Windowで開くように
- Propertyを使ったときに、正しく入力されているかGraphで分かるように
Runtimeについて
また、現在ランタイムでリフレクションを利用していますが、これをソースジェネレーターを利用し、改善することで速度を向上させたいと思っています。
スクリプトノードの追加
会話の結果を後のゲームの挙動に使いたい場合など、独自のスクリプトを会話中に挟めるようにすることを検討しています。
画像の対応
今は画像との連携がしにくいですが、これを改善しGraph内で行えるようにしたいと考えています。
話しているキャラクターが強調表示されるなどです。
アニメーションの追加
テキストのアニメーションもどんどん追加していきたいです。
また、利用者さんが独自にアニメーションを実装できるようにする予定です。
リファクタリング
MagicTweenのTweenをまとめる機能を独自実装してしまいましたが、のちに調べるとちゃんとその機能が存在したため、そちらに修正を予定しています。
最適化
気づいた点があれば少しずつ最適化していこうと思っています。