asmdefファイルをEditor以下に自動追加するエディタ拡張

追記:2020/05/02

githubにリポジトリ作ったのでパッケージマネージャからもインポートできます。

上のアドレスをpackageManagerから入力するだけです。

unity2018.4くらいじゃないと対応してないかもしれません。

その場合はmanifest.jsonを直接書き換えるか、下のソースコードをそのままコピーしてください。


AssemblyDifination何かと便利です。

コンパイル早くなったりするし。プロジェクト大きくなるほど効果があると思います。

ただ、Editorフォルダがあるアセットとかだとすごく面倒なことになります。Editorフォルダに別にasmdefファイルを置かないといけないからです。

Editorフォルダが10個あったりしたら10個作らないといけないはずです。大変な作業になります。

で、面倒だったので何とかエディタ拡張をしてみました。

自動でasmdefファイルを作って、PlatformをEditorのみにしたりするようになってます。

試しにコーギーエンジンに使ってみたら、それなりにうまくいきました。Editorフォルダ内のスクリプトが別のEditorフォルダを参照していたら、それは追加してあげないとむりです。

アセットによっては、最初からasmdefファイルを作ってくれている親切なデベロッパーの方もいます。

一応やる前にバックアップくらいとっておいたほうがいいかもしんないす。

使ったUnityバージョンは2019.3です。

Menu➡WIndow➡CreateAsemdefから開けます

2019/07/06改良しました。

  • Editorフォルダ以下でcsファイルがなければasmdefを作成しません。

2019/12/26改良しました。

  • Editorフォルダの時、[csファイルが無い、且つ、Dllファイルがある時]だけasmdefファイルを作成しません。csファイルがなくてもフォルダがあるかもしれないので、一応作成する。
  • 参照を入れるときの処理を変更しました。

2020/05/02改良しました。

  • githubにリポジトリ作りました。UnityのPackageManagerからインポートできます。

困ったこと

internalで修飾してあるクラスなんかがあると動かなくなる場合があります。同じアセンブリ内にアクセスを制限する修飾です。

Type.GetType()という文字列から型を取得するメソッドがあり、アセンブリ名を使うことがあります。

Doozyのグラフエディタで発生したんですが、ノードを繋ぐ時にGetTypeで型を調べているみたいです。

その時にアセンブリ名を参照する文字列を使っています。

こんな感じの。

で、「一度ノードを作った後」に「asmdefファイルを作成してしまう」と、アセンブリ名(上の例でいえば"Doozy.asmdef")が変わってしまうため、ノードを繋ぐ時に型を取得できなくなりエラーになります。

グラフエディタを使う前にasmdefファイルを作っておけば、とりあえずは大丈夫だと思います。

もうすでにノードを作っていたら、どうすればよいのか分かりませんでした。