Как с помощью скрипта редактора уничтожить материал игрового объекта и добавить к нему новый материал? - PullRequest
0 голосов
/ 16 июня 2020
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
                }
            }
        }

Это уничтожит удаление текущего материала из игрового объекта. Как я могу добавить к нему новый материал? Я хочу добавить к нему новый коврик.

Может быть, не нужно уничтожать просто для переключения материалов?

1 Ответ

1 голос
/ 16 июня 2020
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...