🔧

Unity Mono ビルド製品に外部から Modding する BepInEx

2021/05/08に公開

https://github.com/BepInEx/BepInEx

Unity のビルド機構には、クロスプラットフォーム C# ランタイム Mono を利用する Mono ビルドと、 C++ にコードを変換する IL2CPP ビルドの二種類があります。

前者の Mono ビルドの場合、デコンパイルすることによってある程度の元となる .cs ソースコードを閲覧することが可能になります。これは例えば Java でも同じで、 jar ファイル(名前が違うだけで jar はほぼただの zip)をデコンパイルして .java ソースコードを閲覧することが出来ます(クラス名など復旧できないものもあります)。 IL2CPP ビルドでも C++ のソースコードに変換することが可能なようです。

この Mono ビルドされた Unity に対してパッチを適用することで、挙動を変更出来る仕組みを提供しているのが BepInEx と呼ばれるツールです。

Risk of Rain 1, 2 のように、 Unity を使わない .NET(XNA, FNA Framework) 製ゲームでも利用が可能なようです。

これを利用することで、あたらしい MonoBehaviour クラスをインジェクトしたり、既存の機能を書き換えることが可能です。

以前話題となったクラフトピアの操作キャラを VRM に変更する MODは、この BepInEx を利用して実装されています。

ソースコードもOSSとして展開されています。

もちろんこれは 非公式 なものでした(現在は MOD 作者自身引き抜かれて公式化しているようです)。デコンパイルを禁止する利用規約などが書かれているアプリも多いので、MODの作成・利用は自己責任となります。

多くの BepInEx 製プラグインは黙認されているのが現状です。MODを認めたくない場合は、 IL2CPP ビルドを行ったり、難読化ツール(Appfuscator など)を利用するのが賢明です。

コミュニティ活性化の一つの手法としてこの Modding が成されるゲームは意外と多いです。例えば GTA シリーズはかなり解析が進んでおり、任意の実在する車を登場させたり(GTAシリーズはその暴力性のためか、実在する車種・会社は登場していません)、 パルプンテを発動したり様々なことが出来るようになっています。

Nexus Mods のように、多数のゲームの MOD を提供するサービスも存在します。

Android 向けビルドの apk も、同様にデコンパイル出来るようです(PC向けよりは難しいぽい)。

参考資料

Discussion