Измените материалы GameObject на оригинальные - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь создать эффект каменного умения для игрового объекта (скелета с копьем), меняя материалы на каменный, а затем возвращаясь к предыдущим.

Что меня интересует, так это изменение обратно. В GameObject есть несколько childs и childs of childs. На некоторых из этих детей рендеры. К некоторым из этих средств визуализации прикреплено более одного материала.

Я запрашиваю код для сохранения материалов, прикрепленных к этим средствам визуализации, и код для их повторной установки после окончания эффекта камня ... или что-то подобное.

Я пробовал много раз, но не получил полного результата.

Спасибо.

1 Ответ

0 голосов
/ 02 ноября 2018

Вы можете просто сохранить ссылки на оригинальные материалы в начале как

 // Here we store the renderers
private Renderer[] _childRenderers;

// Here we store all materials of each renderer
private readonly Dictionary<Renderer, Material[]> _originalMaterials = new Dictionary<Renderer, Material[]>();

private void Awake()
{
    // Get all Renderer components of this GameObject and any child
    // of it (recursively)
    _childRenderers = GetComponentsInChildren<Renderer>();

    // For each renderer get the original materials
    foreach (var childRenderer in _childRenderers)
    {
        _originalMaterials[childRenderer] = childRenderer.sharedMaterials;
    }
}

Теперь у вас есть все ссылки на исходные материалы для каждого Renderer и вы можете сбросить их, например, с помощью

public void ResetMaterials()
{
    foreach (var childRenderer in _childRenderers)
    {
        childRenderer.materials = _originalMaterials[childRenderer];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...