【Unity】ShaderGraphのTimeをTimeScaleの影響を受けないようにする

はじめに

ShaderGraphのTimeノードはTimeScaleの影響を受けてしまうので受けない方法を紹介します

下記画像はTimeScaleの影響を受けてる状態のものです

環境は Unity 2021.3.25f1です

Universal Render Pipeline を使用しています。

作成

最初にShadergraph側でTimeScaleの影響を受けないTimeを格納するためのプロパティを用意します

作成したプロパティにスクリプトでTime.unscaledTimeを入れればTimeScaleの影響を受けないようになります(シーン上に配置すること)

using UnityEngine;

public class UnScaleShader : MonoBehaviour
{
    void Start()
    {
        
    }

 
    void Update()
    {
        //_UnScaleTimeはShaderGraphで設定したReferenceにする
        Shader.SetGlobalFloat("_UnScaleTime", Time.unscaledTime);
        //cosine timeの場合
       // Shader.SetGlobalFloat("_UnScaleTime", Mathf.Cos(Time.unscaledTime));
    }
}

完成

下記PlaneのUVスクロールがTimeScaleの影響を受けないようになりました