Unity - Изменить цвета вершин - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть следующий код в обратном вызове обновления

    Mesh m = GetComponent<MeshFilter>().sharedMesh;
    Color[] newColors = new Color[m.vertices.Length];
    for (int vertexIndex = 0; vertexIndex < newColors.Length; vertexIndex++)
    {
        newColors[vertexIndex] = new Color(Random.value, Random.value, Random.value, 1.0f);

    }
    m.colors = newColors;

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

Выход

enter image description here

1 Ответ

0 голосов
/ 09 сентября 2018

Ваш код хорош.

Большинство встроенных шейдеров не отображают цвета вершин, поэтому вы должны использовать один из шейдеров "Particle" или изменить / создать свой собственный.

Вот и все.

.

Что-то не так, верно? : D

Шейдеры частиц выглядят плохо на трехмерных сетках, таких как ваша Сфера, из-за плохого рендеринга альфа-слоев.

Вы должны создать второй, немного меньший объект, и назначить что-то, что блокирует / скрывает пустое пространство внутри вашего основного.

Например:

Shader "Custom/VertexLitBlendedWithZ" {
Properties {
    _EmisColor ("Emissive Color", Color) = (.2,.2,.2,0)
    _MainTex ("Particle Texture", 2D) = "white" {}
}

Category {
    Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
    Blend SrcAlpha OneMinusSrcAlpha
    Cull Off ZWrite On Fog { Color (0,0,0,0) }

    Lighting On
    Material { Emission [_EmisColor] }
    ColorMaterial AmbientAndDiffuse

    SubShader {
        Pass {
            SetTexture [_MainTex] {
                combine texture * primary
            }
        }

    }
}
}

Теперь все отображается так, как должно.

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