Skip to content

Code graph ja

Tom_XV edited this page Sep 23, 2026 · 3 revisions

English | 日本語

実験的な機能です。 フレームワーク 1.4.0 で入ったもので、この先のバージョンで変わったり、無くなったりするかもしれません。

コードのグラフは、ゲームのコードを図にして見せるものです。メソッドのブロックと分岐、そこから呼ぶもの、読み書きするフィールド、誰のパッチが付いているか、どのイベントからそこへ来るかが見られて、呼び出しをクリックすればそのメソッドが開きます。dnSpy を使わずに「どこに差し込めばいいか」「このメソッドがほかに何を触るか」を知りたい Mod の作り手向けです。Inspector の Code 表示を、行の一覧ではなく図にしたものだと思ってください。

この PC の Bridge が出しているページで、Windows では専用の窓に、それ以外ではブラウザーに表示されます。

見せるもの

1 つのメソッドについては、次のものを見せます。

  • メソッドの基本ブロックを、順に並べます。各ブロックには、呼ぶメソッドや読み書きするフィールド、何を比べて何を返すか(あるいは投げるか)といった、そのブロックですることが言葉で書いてあります
  • ブロックの間の矢印が分岐で、true/false、case n、loop back、catch、finally のラベルが付きます
  • 呼ぶメソッドは、それを呼んでいるブロックの中に並びます。ゲームのメソッドはクリックで開けますが、Unity と .NET のメソッドは出すだけで開きません
  • 呼び出し元として、そのメソッドを呼んでいるゲームのメソッドも出ます。基底のメソッドを通して呼んでいるものも、through とその基底のメソッドの名前を付けて並べます
  • そのメソッドに付いている Harmony の prefix、postfix、transpiler、finalizer も出ます。持ち主の Mod は、Harmony の ID だけでなく、Mods 画面に出る名前で示します
  • 読み込まれたシーンの中の UnityEvent のリスナーと Unity のメッセージのうち、そのメソッドにつながるものも出ます
  • コルーチンや async のメソッドは、コンパイラーが作る隠れたクラスをたどって、その中身をメソッドの本体として描きます。yield や await の 1 つ 1 つが、ラベル付きの矢印になります

1 つの型については(型の表示)、メソッドを Update などの Unity のメッセージ、public、private のまとまりごとに並べて、その間の呼び出しを線でつなぎます。クリックすると、そのメソッドが開きます。

描くのはゲーム自身のコードと、そのスタジオや作者のライブラリです。Unity や .NET、同梱されたライブラリ、Mod 自身のコードは描きません(Mod は、そのパッチとして出てきます)。

開き方

次のものが要ります。

  • Developer tools がオンになっていること(Options → Mods → Drag'n Wash ModFramework)。
  • Inspector と Bridge のライブラリが入っていて、Bridge がオンになっていること。F1 の窓の Bridge タブの Turn on(または Console で bridge on)でオンにできます。オフのままだと、Graph のボタンに Bridge が要ることが出ます。

そのうえで、ゲームの中では次のように開きます。

  • F1 → Inspector → オブジェクトを選ぶ → コンポーネント → Code → メソッドの Graph。Graph が出るのは、ゲーム自身のメソッドだけです。
  • 同じ Code 表示の Type graph を押すと、その型全体の型の表示が開きます。

Console からも開けます。

  • op bridge.page.open focus=m:<メソッドの ID> でメソッドが開きます。ID は 名前空間.型::メソッド(引数の型,...) の形で書きます。
  • op bridge.page.open focus=t:<型> で型が開きます。
  • focus を付けずに op bridge.page.open とすると、ページが検索の画面で開きます。

Bridge がオンの間は、ゲームの窓がほかの窓の後ろにあってもゲームが止まらないので、グラフはすぐに答えを返します。

どこに開くか

開く場所は、設定の [Bridge] OpenPageIn(Mods 画面では Drag'n Wash ModFramework: Bridge → Settings → Open the code graph in)で選べます。

値 開く場所
App(既定) Windows では、専用の窓 CodeGraph.exe。Bridge の CodeGraph フォルダーに入っています。
Browser 既定のブラウザー。

アプリがないときや Windows 以外では、いつもブラウザーで開きます。ブラウザー用のリンクは自動でサインインしますが、使えるのは 1 分以内に 1 回だけです。期限が切れていたら、F1 の窓からもう一度開いてください。Steam Deck では、デスクトップモードのブラウザーで開きます(まだ試していません)。

アプリ(Windows)

CodeGraph.exe は、ブラウザーと同じページを専用の窓で見せるアプリです。

  • 3 秒ごとに、ゲームが応答するかを確かめています。ゲームが閉じている間は Waiting for the game と出して待ち、ゲームが戻ってくると、見ていたメソッドのまま自分でサインインし直します。
  • 窓は 1 つだけです。開いているときにもう一度 Graph を押すと、同じ窓にそのメソッドを出して、窓を前に持ってきます。
  • Keep on top(ページのヘッダーにあるボタンで、アプリの中にだけあります)を押すと、窓をゲームやほかの窓より上に置いたままにできます。
  • 窓の大きさと位置、Keep on top、詳細の欄の幅、結果の欄をたたんだかどうかは覚えておきます。Windows のアプリがダークのときは、タイトルバーも暗くなります。
  • Steam はこのアプリをゲームの一部とは数えないので、ゲームを閉じたのに Steam では「実行中」のまま、ということにはなりません。
  • この窓で開けるのは、Bridge のページだけです。

ページの使い方

ヘッダーには左から Results、← / →、検索欄、Fit、それにアプリでは Keep on top が並んでいて、その下に結果、グラフ、詳細の 3 つの欄があります。

  • 検索するときは、型やメソッドの名前の一部(たとえば Dragon や Update)を打ちます。Enter を押せばすぐに検索し、結果をクリックすると開きます。
  • ← と → で、開いたものを戻ったり進んだりできます。
  • グラフの中は、背景をドラッグして動かし、マウスホイールで拡大・縮小します。矢印キーでも動かせます。Fit(または F キー)で、グラフを窓に合わせ直せます。
  • ブロックをクリックすると、詳細の IL の中でそのブロックに印が付きます。
  • 詳細の欄には、メソッドの型とシグネチャ、それにアセンブリ、Unity message、coroutine または async、patched のタグが出ます。ほかに Whole type(型の表示)、Patches on it、Called by(呼び出し元をクリックすると開きます)、Events that lead here があり、IL もブロックごとに出て、印の付いたブロックまでスクロールします。コルーチンの隠れたメソッドでは、Open the coroutine's method で、それを始めるメソッドに戻れます。コルーチンの中の紫の破線の矢印は、yield や await のあとで再開するところです。
  • 詳細の欄の幅は、グラフと詳細の間の線をドラッグして変えます(線にフォーカスして、左右の矢印キーでも変えられます)。幅は覚えておきます。
  • Results ボタンで、結果の欄をたたんだり出したりできます。これも覚えておきます。

New token や Disconnect all を押したときと、Bridge をオフにしたときは、ページがサインアウトします。F1 の窓からもう一度開いてください。

プライバシー

  • ページだけで、MCP には出しません。 グラフを読めるのはページ(と Console の op)だけで、MCP で Bridge につないだ AI クライアント(Bridge)からは見えません。ゲームのコードは、この PC の中から出ません。
  • 見せるのは構造で、ソースではありません。 C# への逆コンパイルはしません(それは今までどおり dnSpy や ILSpy の仕事です)。ページが見せるのは、ブロック、呼び出し、フィールド、パッチといった構造です。
  • この PC の外には何も出ません。 ゲームのコードは Gator Dragon Games が作ったものです。そのどこも、ファイルに書き出したり、この PC のページ以外に送ったりはしません。ページ自身も、インターネットから何も読み込みません。

設計:docs/CODE_GRAPH.ja.md。

Clone this wiki locally