Как переключаться между двумя материалами, назначенными одному игровому объекту в Unity3D? - PullRequest
0 голосов
/ 24 мая 2019

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

В Unity3D в меню инспектора в выбранном мной Gameobject, в заголовке MeshRenderer под подзаголовком материалов, я увеличил размер с 1 до 2. Я назначил два материала двум вновь созданным элементам. Но когда я запускаю сцену, материалы не переключаются.

public var arrayMAterial : Material[];
public var CHILDObject : Transform;

function Update() {
    CHILDObject.GetComponent.<Renderer>().material = arrayMAterial[0];
}

Нет сообщений об ошибках. Он просто не переключается на новый материал.

1 Ответ

1 голос
/ 25 мая 2019

Вот быстрый C # Script , который будет перебирать массив материалов после задержки.

using UnityEngine;

public class SwitchMaterialAfterDelay : MonoBehaviour
{

    [Tooltip("Delay in Seconds")]
    public float Delay = 3f;

    [Tooltip("Array of Materials to cycle through")]
    public Material[] Materials;

    [Tooltip("Mesh Renderer to target")]
    public Renderer TargetRenderer;

    // use to cycle through our Materials
    private int _currentIndex = 0;

    // keeps track of time between material changes
    private float _elapsedTime= 0;

    // Start is called before the first frame update
    void Start()
    {
        // optional: update the renderer with the first material in the array
        TargetRenderer.material = Materials[_currentIndex];
    }

    // Update is called once per frame
    void Update()
    {
        _elapsedTime += Time.deltaTime;

        // Proceed only if the elapsed time is superior to the delay
        if (_elapsedTime <= Delay) return;

        // Reset elapsed time
        _elapsedTime = 0;

        // Increment the array position index
        _currentIndex++;

        // If the index is superior to the number of materials, reset to 0
        if (_currentIndex >= Materials.Length) _currentIndex = 0;

        TargetRenderer.material = Materials[_currentIndex];

    }
}

Обязательно назначьте материалы и средство визуализации для компонента, в противном случае вы будетеполучить ошибки!

Component in Unity Editor

hth.

...