ノートの端の書き残し

UnityやらC#やら。設計が得意かもしれない。

コードエディタのサポートを受けやすいAPIを作ろう

Unity RenderGraphの惜しい点

RenderGraphでは以下のようなAPIで、パイプラインで使用されている各種データにアクセスすることができます。(厳密には、アクセスを宣言する)

var cameraData = contextContainer.Get<UniversalCameraData>();
var resourceData = contextContainer.Get<UniversalResourceData>();

有向非巡回グラフの特性を使って、依存を明示することで並列性の最適化をする、みたいなのはプログラムのコンパイラがやっていたり、DBでもそういうことやってますよね。なので思想自体は本当に正しいのですが……

Genericsの罪

なぜ基本的なリソース取得をGenericsにしてしまったのか。C#を書いているとき最も嬉しいのが、.を打つとその先の候補が並ぶことです。Genericsを使うと、その恩恵が失われるのですよね。

こういうの書いといた方がいい

public static class RenderGraphExtensions
{
    /// <summary>カメラデータを取得</summary>
    public static UniversalCameraData GetUniversalCameraData(this ContextContainer contextContainer)
    {
        return contextContainer.Get<UniversalCameraData>();
    }
}

あのAPI名前なんだったっけ……となるなら、エディタのサポートを受けられるように用意しておきましょう。 最近はAIのコードサポートがあるので、適切な変数名を付けておけばいい感じに補完してくれるかもしれませんが。