RimWorld私的wiki - DLLを用いたMOD作成

はじめに

このページではDLLを用いたMOD作成について説明します。
間違っている箇所や分からない点があれば、コメント欄かTwitter(@tammybee_tmb)にてお願いします。

必要なもの

・テキストエディタ
XMLを作成・編集する時に使います。

・Visual Studio Community
C#のコードを書いたり、DLLを生成する時に使います。
インストール時に.NETデスクトップ開発を選択しておく必要があります。無い場合はメニューからファイル-プロジェクト-新しいプロジェクトと開いて、青文字の VisualStudioインストーラーを開く からインストールしてください

・ILSpy
ゲーム内部のソース(Assembly-CSharp.dll)を見る時に使います。
通常のほうだとちゃんとデコンパイルされない場合があるので、Zentar氏が作成した方を推奨します。
Zentar氏のILSpy:ダウンロード

作成手順

DLLを用いたMODを作成します。
今回はVisual Studio Community 2017を使います。

[1]プロジェクトの作成

[1-1]プロジェクト作成ウィンドウを開く
・メニューから「ファイル」→「新規作成」→「プロジェクト」を選択する。

[1-2]プロジェクトの種類の選択
・左側で「インストール済み」を選択し、「テンプレート」→「Visual C#」を選択する。
・右側で「クラス ライブラリ(.NET Framework)」を選択する。

[1-3]プロジェクト名とプロジェクトの場所の指定
・プロジェクト名はお好みで
 今回は「TutorialMod」に指定
・プロジェクトの場所もお好みで
 今回は「<RimWorldをインストールしたフォルダ>/Mods/<このMODのフォルダ>/Source」に指定
・「ソリューションのディレクトリを作成」「ソース管理に追加」のチェックを入れないで、「OK」ボタンを押す

[2]プロジェクトの設定

[2-1]プロパティを開く
・メニューから「プロジェクト」→「<プロジェクト名> のプロパティ」を選択する。*1

[2-2]アプリケーションの設定
・「アプリケーション」を選択する。
・ターゲット フレームワークを「.NET Framework 3.5」に指定する。
・ターゲット フレームワークの変更のウィンドウが出てきたら「はい」を選択する。
・アセンブリ名と規定の名前空間はお好みで

[2-3]ビルドの設定
・「ビルド」を選択する。
・構成を「すべての構成」に指定する。
・出力パスを「<RimWorldをインストールしたフォルダ>/Mods/<このMODのフォルダ>/Assemblies」に指定する。
 [1-3]のとおりにプロジェクトの場所を指定した場合、「../../Assemblies」でもOK
・「詳細設定」ボタンを押し、デバッグ情報を「none」に指定する。

[3]参照を追加

[3-1]dllの追加
・メニューから「プロジェクト」→「参照の追加」を選択する。*2
・「Assembly-CSharp.dll」「UnityEngine.dll」を追加する。
 これらのdllは「<RimWorldをインストールしたフォルダ>/RimWorldWin_Data/Managed」内にある。

[3-2]dllのプロパティの設定
・ソリューションエクスプローラーの参照の「Assembly-CSharp」を右クリックし、「プロパティ」を選択する。
・ローカルにコピーを「False」に設定する。*3
・ソリューションエクスプローラーの参照の「UnityEngine」も同様にローカルにコピーを「False」に設定する。

[4]XML、コードを書く

・詳しい内容はここでは省略。

[4-1]XMLを書く
・ThingDefなどを記述したXMLファイルを作成する。

[4-2]C#のコードを書く
・XMLファイルのDefで指定した自作クラスを作成する。
(例)ThingDefの<thingClass>、<comps>内の<li>のClass属性、<li>内の<compClass>などで指定したクラス

[5]ビルド

[5-1]Releaseビルドをする
・メニューから「ビルド」→「構成マネージャー」を選択する。
・アクティブ ソリューション構成を「Release」に設定し、構成マネージャを閉じる。
・メニューから「ビルド」→「ソリューションのビルド」を選択する。
・[2-3]で指定した出力パスに「<アセンブリ名>.dll」が生成される。

その他

・RimWorld起動時に「Oops! The game crashed. The crash report folder named "****-**-**_****" next to game executable.(以下略)」が表示された場合、
 「Assemblies」フォルダ内にpdbファイルがある可能性があります。
 その場合、そのpdbファイルを削除し、[2-3]の「デバッグ情報を「none」に指定する。」を試してください。

参考になりそうなページ

公式フォーラムのMOD制作に関連するカテゴリです。
ピン留めされているSubjectを覗くとけっこう良さげ。
MOD作成の基本的なことやPawnのJobやUIの説明などがあります。
The Plague Gun(当たった相手をペストにする銃)を追加するMODの作成チュートリアル
環境構築からやっています。
既存のコードの処理を書き換えたり、privateフィールドやメソッドにアクセスするのに役立つライブラリ。
MOD制作に役立つライブラリ。
Harmonyを含んでいます。