スクリプトで Material の値を書き換えた場合再生が終了したタイミングで Material の値が書き換わる
例えばこちらの記事のスクリプトのようにC# で Shader のパラメータを操作していた場合を確認する
再生前の Offset がこちら
再生後の Offset がこちら
見てわかるように スクリプトによって値を変更しているため、Material のパラメータが変更されてしまいます
もしVersion管理ツール等を利用している場合再生しただけで、Material の差分がでるようになってしまいます
対応
UnityEditor のみ Material を見てもしそれが Editor上 に存在するファイルだった場合
新しい Material を作成して差し替えることで値を書き換えても直接影響がでないようにする
using UnityEngine; public class UVScroll : MonoBehaviour { [SerializeField] private Renderer _renderer; [SerializeField] private float _scrollX; [SerializeField] private float _scrollY; private Vector2 offset; private void Awake() { #if UNITY_EDITOR // Material が Editor 上に存在するか確認 var path = UnityEditor.AssetDatabase.GetAssetPath(_renderer.material); if (!string.IsNullOrEmpty(path)) { _renderer.sharedMaterial = new Material(_renderer.material); } #endif offset = _renderer.sharedMaterial.mainTextureOffset; } private void Update() { offset.x += _scrollX * Time.deltaTime; offset.y += _scrollY * Time.deltaTime; _renderer.sharedMaterial.mainTextureOffset = offset; } }