如何将层次结构材质中的游戏对象更改为另一种材质?

问题描述 投票:0回答:1
var newmat = AssetDatabase.LoadAssetAtPath("Assets/Materials/Univeral Render Pipeline Lit.mat", typeof(Material));

        object[] obj = FindObjectsOfType<Material>();
        var allob = FindObjectsOfType<GameObject>();

        foreach(object objs in obj)
        {
            var mat = (Material)objs;
            if (mat.name.StartsWith("Default"))
            {
                defaultMaterials.Add((Material)objs);  
            }
        }

我想为newmat分配mat。问题在于它只是材料,而不是这些材料的游戏对象。

此行将找到所有游戏对象:

var allob = FindObjectsOfType<GameObject>();

但是有超过5000个游戏对象,并且遍历所有对象可能很慢。也只有两个我要更改此默认材质的游戏对象。

我应该遍历所有游戏对象获取每种材料并找到默认材料,然后进行切换,或者有一种方法仅使用材料吗?

c# unity3d
1个回答
0
投票

除了Jeff所说的:标记您的GameObjects,您还可以:

  1. 如果您的GameObjects不是动态创建的,您可以将它们分配给MonoBehaviour脚本中的数组属性并访问它们。
  2. 如果您的GameObject是动态创建的,并且您知道哪些将具有默认材质,则可以在创建它们时将它们添加到数组中,以后再访问它们。
© www.soinside.com 2019 - 2024. All rights reserved.