【问题标题】:How can I destroy a material of a gameobject and add a new material to it using editor script?如何销毁游戏对象的材质并使用编辑器脚本向其中添加新材质?
【发布时间】:2020-10-05 14:46:42
【问题描述】:
var newmat = AssetDatabase.LoadAssetAtPath("Assets/Materials/Univeral Render Pipeline Lit.mat", typeof(Material));

        var allgameobjects = FindObjectsOfType<GameObject>();

        foreach(GameObject go in allgameobjects)
        {
            if (go.GetComponent<Renderer>() != null)
            {
                if (go.GetComponent<Renderer>().sharedMaterial.name.StartsWith("Default"))
                {
                    DestroyImmediate(go.GetComponent<Renderer>().sharedMaterial);

                    // Add here the newmat material to the gameobject
                }
            }
        }

这将破坏从游戏对象中删除当前材质我如何向其中添加新材质?我想给它添加新垫子。

也许换材料就不用销毁了?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:
    var newmat = AssetDatabase.LoadAssetAtPath("Assets/Materials/Univeral Render Pipeline Lit.mat", typeof(Material));
    
            var allgameobjects = FindObjectsOfType<GameObject>();
    
            foreach(GameObject go in allgameobjects)
            {
                if (go.GetComponent<Renderer>() != null)
                {
                    if (go.GetComponent<Renderer>().sharedMaterial.name.StartsWith("Default"))
                    {
                        DestroyImmediate(go.GetComponent<Renderer>().sharedMaterial);
    
                        //Add material
                        go.GetComponent<Renderer>().sharedMaterial = newmat;
                    }
                }
            }
    

    但我认为你也可以改变材料

    var newmat = AssetDatabase.LoadAssetAtPath("Assets/Materials/Univeral Render Pipeline Lit.mat", typeof(Material));
    
            var allgameobjects = FindObjectsOfType<GameObject>();
    
            foreach(GameObject go in allgameobjects)
            {
                if (go.GetComponent<Renderer>() != null)
                {
                    if (go.GetComponent<Renderer>().sharedMaterial.name.StartsWith("Default"))
                    {
                        go.GetComponent<Renderer>().sharedMaterial = newmat;
                    }
                }
            }
    

    地形为terrain.materialTemplate

    【讨论】:

    • 它可以双向工作,但由于某种原因,它在地形上不起作用。地形材质名称附近有一个小按钮 Create 用于创建新材质,也许我需要使用它?
    • 我认为地形是terrain.materialTemplate
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多