美文网首页
[工具]清除旧的材质球属性信息

[工具]清除旧的材质球属性信息

作者: 姚宏民 | 来源:发表于2017-05-23 20:22 被阅读0次

环境
Unity5.6.0f3

在U3D中,材质球的属性是跟随shader属性保存到材质球的SaveProperties中,但是切换shader的时候,旧的属性并不会被删掉,虽然这些属性在打包的时候会被过滤掉,但是这会影响到编辑器下对材质球的一些编辑操作。

 static void ClearMaterialUnusedProperties(Material mat, bool isSaveImmediate = true)
        {
            SerializedObject matInfo = new SerializedObject(mat);
            SerializedProperty propArr = matInfo.FindProperty("m_SavedProperties");

            propArr.Next(true);
            do
            {
                if (!propArr.isArray) continue;
                for (int i = propArr.arraySize - 1; i >= 0; --i)
                {
                    var p1 = propArr.GetArrayElementAtIndex(i);
                    if (p1.isArray)
                    {
                        for (int ii = p1.arraySize - 1; ii >= 0; --ii)
                        {
                            var p2 = p1.GetArrayElementAtIndex(ii);
                            var val = p2.FindPropertyRelative("first");
                            if (!mat.HasProperty(val.stringValue))
                            {
                                Debug.Log("remove " + mat.name + "," + val.stringValue);
                                p1.DeleteArrayElementAtIndex(ii);
                            }
                        }
                    }
                    else
                    {
                        var val = p1.FindPropertyRelative("first");
                        if (!mat.HasProperty(val.stringValue))
                        {
                            Debug.Log("remove " + mat.name + "," + val.stringValue);
                            propArr.DeleteArrayElementAtIndex(i);
                        }
                    }
                }
            } while (propArr.Next(false));

            matInfo.ApplyModifiedProperties();
            //Resources.UnloadAsset(mat);
            if (isSaveImmediate)
                AssetDatabase.SaveAssets();
        }

相关文章

  • [工具]清除旧的材质球属性信息

    环境Unity5.6.0f3 在U3D中,材质球的属性是跟随shader属性保存到材质球的SaveProperti...

  • unity打包 材质球报错:An asset is marked

    如题,但是材质球本身并无该属性。重新创建该材质球即可正常打包。 对比git日志发现确实有hideflag修改: 后...

  • 更换材质球,更换材质球主贴图

    建立材质球数组,可以随意切换材质球;建立Texture数组,可以动态更换材质球的maintexture. 欢迎交流...

  • 替换unity自身的mask遮罩

    新建材质球,设置图,新建image,赋值材质球即可

  • C4D制作飘舞丝色丝带详情

    一、选择Plane工具,在Object——Orientation,选择-Z 二、新建材质球,在Color——Tex...

  • u3d 基础知识(组件等)

    材质球与贴图: 材质球:Material,材质:物体的质地,物体看起来是由什么做的,什么材质的(木头的、铁的)。 ...

  • three.js之材质

    材质(Material)是独立于物体顶点信息之外的与渲染效果相关的属性。通过设置材质可以改变物体的颜色、纹理贴图、...

  • UE4材质_属性贴图0123bate1

    材质_属性 贴图 更深入探讨组成材质的属性。 通过调整这些属性,您可以选择当应用材质到物体时材质的外观,以及其如何...

  • 《Shader 入门精要》之贴图

    实验 素材: 在材质球中,我们经常可以看到像 Main Tex 这样的属性,里面有个 Tiling 和 Offse...

  • U3D基础知识点

    (此内容来源网上,仅供自己研究学习...) 材质球与贴图: 材质球:Material,材质:物体的质地,物体看起来...

网友评论

      本文标题:[工具]清除旧的材质球属性信息

      本文链接:https://www.haomeiwen.com/subject/onarottx.html