MOD禁止令を出され、じゃあ自分でゲーム作ったれ!と、勢いで制作しておりますが、私はプログラミングができません。
Unityにはビジュアルスクリプティング(旧BoltやPlaymaker)があるんで、それ自体は大きな問題にはならないんですが、MOD対応させると話は別。MOD対応させたいけど、どうやったらいいか分からない問題が発生します。
また、せめてテクスチャだけでも入れ替えることができように、外部ファイル読み込めるようにしようとすると、外部ファイルの画像にUnityの読み込み設定を埋め込むことができないという問題も発生します。Unityの読み込み設定がないと意図した通りにテクスチャが反映されません。
さて、プログラミングなしで簡単にMOD対応させる方法はないものか……そう考えていたんですがちょっと光明が見えてきましたので、思いついた方法を書いておきます。
※そもそもお前の作った同人ゲームにMOD作るやついんのか?って話ですが、それはまあMOD禁止ゲームへのアンチテーゼでもあるんで実装はしたいですよねぇ。
AssetBundleを作ってMODをロードさせる
今回、私が思いついたのは AssetBundleを作ってその中にMODを入れてゲームで動作させよう、という方法です。
AssetBundleはUnityとAsset Bundle Browserがあれば誰でも作ることができます。また、通常AssetBundleはC#スクリプトを付け加えることができないんですが、Visual Scriptingやplaymakerをあらかじめプロジェクトに組み込む事によって、それらで動くプログラムを追加することができます。
ダミーファイルのAssetBundleを最初から読み込むようにしておいて、ユーザー側が後でダミーファイルの代わりにMODファイルを読み込ませるとMODが動作する、という仕組みです。
実際に動かしてみた
理屈通りに動くのかテストしてみます。
まずゲーム側にこのようなVisual Scriptingのグラフを設置しました。これでAssetBundleを読み込みさせています。
ゲームのStreamingAssetsのフォルダパスと、読み込みしたいAssetBundleのパスの文字列を合体させてパスを指定し、読み込みさせてます。そのあとでAssetBundle内のオブジェクトを指定して設置させます。
Playmakerでもできます。こんな感じ。
Load Streaming Asset Bundleはecosystemからダウンロード、Load Asset Game ObjectはGituhubのplaymaker_assetbundleからダウンロードして使用できます。
オブジェクトを設置させないとテクスチャを取り出したりプログラムを動かしたりできないようです。できるのかもしれませんが、現時点で私は分かりません。何も表示させたくない時は、MeshをNoneにしてオブジェクトを設置すれば良いです。
実際にユーザーが作って動作するのか確認する為、別のプロジェクトを作ってそこでCubeオブジェクトを作ります。Cubeオブジェクトに自身が回転するVisual Scriptingのグラフを設置。AssetBundle化して実際に動作すれば他にも応用がきくことになります。
意図通り動作してくれました。Visual Scriptingが動作すればライトユーザーも簡単にMODが作れるし、ヘビーユーザーも満足できるMODが作れるはずです。
あとで規約考えないとな……
私は基本的にMODに対して寛容でありたいと考えているので、違法行為以外は制限するつもりはありませんが、そもそもMODが著作権法的に違法じゃねえか?という問題がありますので、規約を違法行為以外は何でもOK!とはできないんですよね。ここまでは著作権で訴えません!この素材は使ってもOKです!という明確な提示が必要になってくるわけです。う~む。