Смена материала объекта в Unity

229
01 ноября 2017, 00:37

Пытаюсь изменить материал объекта через код

 if (MoveToPoint(point[stage]))
    {
        stage = stage == 1 ? 0 : 1;
        if (on_x)
            transform.localScale = new Vector3(-transform.localScale.x, 1, 0.032f);
        else
        {
            gameObject.GetComponent<MeshRenderer>().materials[0] = materials[stage];                                   
        }
    }

При этом материал объекта не изменяется, хотя условия выполняются. Пробовал отключать Animator и NavMeshAgent перед сменой материала ( в else), не помогло. В чём проблема? (Ниже представлен массив материалов и стандартный материал объекта)

Answer 1

Необходимо обращаться к свойству material компонента MeshRenderer

if (MoveToPoint(point[stage]))
{
    stage = stage == 1 ? 0 : 1;
    if (on_x)
        transform.localScale = new Vector3(-transform.localScale.x, 1, 0.032f);
    else
        gameObject.GetComponent<MeshRenderer>().material = materials[stage];                                   
}

Хорошо бы попробовать прямой вызов без условий где-то в Start()

gameObject.GetComponent<MeshRenderer>().material = materials[0];
Answer 2

Materials возвращает копию массива, а не ссылку. Надо менять массив целиком. Получаешь массив, нужный индекс заменяешь на свой. И обратно присваиваешь. Профит.

READ ALSO
Как удалить все одинаковые строки из файла txt?

Как удалить все одинаковые строки из файла txt?

Как-то спрашивал такой вопрос: убрать повторы строк из txt

283
Проблема с разделением строки C#

Проблема с разделением строки C#

Имеется программа, которая открывает файл Settingsini, расшифровывает содержимое, заносит в таблицу данные, и зашифровывает файл обратно

249
Десериализация сложного JSON объекта C#

Десериализация сложного JSON объекта C#

Имеется сложный, не стандартный JSON объект:

259
Selenium | NoSuchWindowException

Selenium | NoSuchWindowException

Как можно обойти исключение NoSuchWindowException в Selenium ?

251