コード例 #1
0
        /// <summary>
        /// Sets all materials on the renderers to copies using fallback shaders
        /// </summary>
        /// <param name="renders"></param>
        internal void SetFallbacks(Renderer[] renders)
        {
            foreach (var r in renders)
            {
                var serial    = new SerializedObject(r);
                var materials = serial.FindProperty("m_Materials");

                for (int i = 0; i < r.sharedMaterials.Length; i++)
                {
                    var oldMat = r.sharedMaterials[i];
                    if (AssetDatabaseHelpers.IsBuiltInAsset(oldMat))
                    {
                        continue;
                    }

                    var newMat   = cache.GetCachedCopy(oldMat, out bool _);
                    var fallback = MaterialManager.CreateFallbackMaterial(newMat, Color.white);

                    var mat = materials.GetArrayElementAtIndex(i);
                    mat.objectReferenceValue = newMat;
                }

                serial.ApplyModifiedProperties();
                AssetDatabase.SaveAssets();
                PumkinsAvatarTools.Log($"Set fallback materials for <b>{r.gameObject.name}</b>");
            }
        }