ikasabaが勝手に編集するRimWorldのwiki

MOD作成の備忘録的な何かを色々書く予定のページ
所々雑ですがよろしくおねがいします
間違っている箇所や分からない点があれば、コメント欄かTwitter(@tammybee_tmb)にて

ILSpyについて

・C#でコードを書く上でどのように書けばいいかわからない。
・DLL(実行ファイル(exe)から呼び出して色々処理を行うもの)をデコンパイル(C#のコードへの変換)してゲーム内部のソースを見る必要がある。
・このデコンパイルするために必要なのが「ILSpy」というデコンパイラ

デコンパイル方法

[1]ILSpyの入手
[1-1]ILSpyをダウンロード
・Zhentar氏が作成したものをダウンロードする。
 Zentar氏のILSpy:ダウンロード

[1-2]任意のディレクトリに展開する。

[2]ILSpyを開き、dllをデコンパイル
[2-1]ILSpyを開く

[2-2]「Assembly-CSharp.dll」を開く
・メニューから「File」→「Open...」を選択する。
・「<RimWorldをインストールしたフォルダ>/RimWorldWin_Data/Managed/Assembly-CSharp.dll」を開く(※1)。
・開くと、左側のペインに「Assembly-CSharp(X.X.X.X)」が確認できる。

※1 使用環境によってパスが異なるのであくまで一例

[3]中身を覗く。
・今回はThingDefクラスを調べる。
[3-1]左側のペインから探す
・「Assembly-CSharp(X.X.X.X)」を展開する(左側の[+]を押す)と、「Assembly-CSharp」内の名前空間の一覧が出てくる。
・名前空間「Verse」を展開し、「ThingDef」を選択すると、ThingDefクラスの中身が表示される。
・ThingDefクラスを見てみると<category>や<rotatable>などXMLで編集できる項目(フィールド)がたくさんあることが分かる。
・「public class ThingDef : BuildableDef」の「BuildableDef」をクリックすると、BuildableDefクラスの中身を見ることができる。

[3-2]検索する
・メニューから「View」→「Search...」を選択する。
・「ThingDef」と入力し、Search for:の右のドロップダウンリストで「Type」を選択すると、該当する型の一覧が表示される。
・「ThingDef」を選択すると、ThingDefクラスの中身が表示される。

[4]使われている場所を調べる。
・今回はThingDefクラスを調べる。
[4-1]Analyzerを開く。
・「ThingDef」を右クリックし、「Analyze」を選択すると、Analyzerペインが開く。
・「Verse.ThingDef」を展開し、「Used By」を展開すると、ThingDefを使用しているメソッドやフィールドの一覧が表示される。

Q&A

なんでZentar氏のILSpyを使うのか
通常版だとちゃんとデコンパイルされない場合があるため
(例)JobDriver_LayEggクラスのMakeNewToilsメソッド
・とは言ってもところどころバグってる
(例)「this.<>f__this.Map」→整形後→「this.Map」
検索すると「クラス名.<メソッド名>c__IteratorXX」みたいなクリックしても表示できないものが出てくる
・しょうがないので「クラス名」で検索して中を覗く

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

メンバーのみ編集できます

メンバー募集!