using System.Collections; using System.Collections.Generic; using Convention; using UnityEngine; namespace Demo.Game { public class MaterialUpdatement : Updatement, IAssetBundleLoader { public static MaterialUpdatement Make() { return new GameObject().AddComponent(); } public string MaterialAssetBundlePath; public AssetBundle MaterialAssetBundle; protected override string Lerp(string begin, string end, float t) { return begin; } [Content, SerializeField] private string Cache; protected override void UpdateData(string data) { if (string.IsNullOrEmpty(MaterialAssetBundlePath)) return; if (Cache != data && Parent.TryGetComponent(out var meshRenderer)) { meshRenderer.material = MaterialAssetBundle.LoadAsset(data); Cache = data; } } public override IEnumerator UnloadScript() { Cache = null; if (string.IsNullOrEmpty(MaterialAssetBundlePath) == false) yield return this.UnloadAssetBundle(MaterialAssetBundlePath); MaterialAssetBundlePath = ""; yield return base.UnloadScript(); } /// /// 对应ab包名称,自动匹配对应平台 /// /// [ScriptableCall(@" 对应ab包名称,自动匹配对应平台 ")] public IEnumerator Load(string ab) { yield return this.LoadAssetBundle(ab, x => { MaterialAssetBundlePath = ab; MaterialAssetBundle = x; }); } /// /// 在指定时刻切换父物体上的MeshRenderer.material /// /// /// [ScriptableCall(@" 在指定时刻切换父物体上的MeshRenderer.material ")] public void Add(string time, string material) { ManualAddEntry(time, material, default); } } }