Notifications
Article
UnityCsReferenceで多くの知識を取り入れよう
Updated 9 months ago
446
0
Unityのソースコードを参考にしてエディター拡張の役に立てましょう
GithubでUnityCsReferenceプロジェクトとして、Unityのソースコードが一部公開されました。
今回は、エディター拡張においてUnityCsReferenceとどう向き合っていけばいいかの紹介をしたいと思います。


Unity Reference-Only License とは何か

まずはこのプロジェクトがどのような意図で公開されているかを確認します。UnityCsReferenceはUnity Reference-Only Licenseの元公開されています。
ライセンスの内容を要約します。とりあえず以下の点を押さえておけば問題ないです。
  • 参照専用。この目的において複製は可能。
  • 再配布は不可。また改変不可。
更に言葉を砕く感じでいくとコピペはダメです。あくまでコードを見るだけです。

リポジトリをCloneしてVS Codeで見る

参照専用といっても、コードを眺めるだけでも勉強になることは多くあります。今回はGithubからリポジトリをCloneしてVS Codeでコードを見ていきましょう。事前に C# プラグインをインストールしてください。(もちろんVS CodeではなくXamarinやVisual Studioを利用しても問題ありません)


プロジェクトを開くための .sln ファイルは Projects/CSharp/UnityReferenceSource.sln にあります。
エディター拡張において見るべき場所は Editor/Monoフォルダー配下です。AssetDatabaseEditorApplicationなどよく使用するクラスのクラスファイルがあることがわかります。
クラスファイルにはbindingsという特殊なファイルがあります。bindingsファイルにはC++コードとの連携するためのextern宣言のメソッドが多く存在します。bindingsファイルは得られる情報は少ないのでエディター拡張でコードを参考にする場合、閲覧する優先度でbindingsファイルは後回しにしても構いません。

面白機能を見つける

ファイルを眺めていると今までわからなかった隠された機能など、私達にとってはワクワクする(?)機能を見つけることができます。その例を紹介しましょう。
AboutWindowクラスに、ListenForSecretCodes というメソッドがあります。コードを読んでいくと... ウィンドウ内で internal と入力するとInternal モードに切り替わるようです。
InternalモードのフラグはInternalModeをキーとしてEditorPrefsに保持されています。



Internalモードがどのような振る舞いをするか調べてみると、WindowメニューにScreenshotが追加されていました。
このメニューがMenuItemクラス経由で登録されていると仮定して探してみるとScreenShotsクラスを見つけることができます。


試しに Snap View メニューの動作をコードで読んでみましょう。どうやらマウスカーソルを載せたEditorWindowのスクリーンショットを取ることができるようです。この仕様だとショートカットコマンドで実行させるのが良さそうです。MacだとAlt + Cmd + J で実行できます。

SaveScreenShot メソッドを見てみると、どうやら画像は InternalEditorUtility.ReadScreenPixel を使ってピクセルデータを取得し、Texture.EncodeToPNGで生成しているようですね。
...という感じで今回はInternalモードを見つけ、スクリーンショットの機能、画像を生成する方法まで知ることができました。
気になるところを掘り進んでいくだけでも幾つもの知識を得ることができます。ぜひ皆さんもUnityCsReferenceを活用して多くの知識を取り入れてください。

Keigo Ando
2
Comments