Единство C# почему цвет сборного ребенка не меняется - PullRequest
0 голосов
/ 12 марта 2020

В моем проекте единства у меня есть сборный дом со многими дочерними объектами. Если я нажму на кнопку, я хочу, чтобы некоторые дочерние объекты из префаба изменили свой цвет. К сожалению, с моим кодом ничего не происходит.

Это мой код:

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;
        }
    }
}

Что мне нужно изменить, чтобы мой код работал? К сожалению, я не смог найти решение, которое работает для меня.

1 Ответ

1 голос
/ 12 марта 2020

Видя, как ваша ошибка

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

Я почти уверен, что вы ссылаетесь на объект в папке ресурсов, а не на экземпляр объекта в сцене. Убедитесь, что вы ссылаетесь на объект в сцене, и проблема должна быть решена.

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