首页 > 解决方案 > Unity C#为什么预制子的颜色不会改变

问题描述

在我的统一项目中,我有一个带有许多子对象的预制件。如果我点击一个按钮,我希望预制件中的一些子对象改变它们的颜色。不幸的是,我的代码没有任何反应。

这是我的代码:

public class ColorChanger : MonoBehaviour
{
    public GameObject preFabParent;
    public GameObject preFabChildTarget

    public Material newColor;

    Renderer[] prefabChildrenParent, prefabChildren;

    bool changePrefabColor;

    void Start()
    {
        prefabChildrenParent = preFabParent.GetComponentsInChildren<Renderer>();
        prefabChildren = preFabChildTarget.GetComponentsInChildren<Renderer>();
    }

    void Update()
    {
        // bool is changed by a button click:
        if(changePrefabColor) ChangeColor();
    }

    void ChangeColor()
    {
        // Now I want that all the child objects from the prefabChildTarget get the new color.
        foreach(Renderer child in prefabChildren)
        {
            var mats = new Material[child.sharedMaterials.Length];
            for(var j = 0; j < child.sharedMaterials.Length, j++)
            {
                mats[j] = newColor;
            }
            child.sharedMaterials = mats;
        }
    }
}

我必须改变什么才能使我的代码正常工作?不幸的是,我找不到适合我的解决方案。

标签: c#unity3d

解决方案


看看你的错误是怎样的

Not allowed to access Renderer.materials on prefab object. Use Renderer.sharedMaterials instead

我很确定您引用的是资产文件夹中的对象,而不是场景中的实例化对象。确保您引用了场景中的对象,问题应该得到解决。


推荐阅读