Unity 2018.3 HDRP - изменить цвет материала программно? - PullRequest
0 голосов
/ 21 января 2019

Я использую новый шейдер HDRP / LitTesselation.

Я хотел бы изменить Base Color + Opacity во время выполнения:

img

Я добавил этот код в скрипт игрового объекта:

void start()
{
        Color color = new Color(100, 50, 100, 150);

        //Fetch the Renderer from the GameObject
        Renderer rend = GetComponent<Renderer>();

        //Set the main Color of the Material to green
        rend.material.shader = Shader.Find("_Color");
        rend.material.SetColor("_Color", color);
}

Но он генерирует ошибку Hidden/InternalShaderError в шейдере.Кто-нибудь может указать мне правильное направление?

Ответы [ 3 ]

0 голосов
/ 21 января 2019

Я заработал, изменив эти строки следующим образом:


rend.material.shader = Shader.Find("HDRenderPipeline/LitTessellation"); 
rend.material.SetColor("_BaseColor", color);

0 голосов
/ 02 июня 2019

Это для HDRP / Lit:

private Material _mat;

void Start()
{
    Renderer nRend = GetComponent<Renderer>();
    _mat = nRend.material;
}

void Update()
{
    Color nNew = //do whatever you want here
    _mat.SetColor("_BaseColor", nNew);
}

Однажды я прочитал, что следует использовать «sharedMaterial» вместо «материала».Тем не менее, я думаю, что это была просто опечатка.Я думаю, что sharedMaterial повлияет на ВСЕ HDRP / Lit материалы.

0 голосов
/ 21 января 2019

Скорее всего, проблема связана с этой строкой:

Color color = new Color(100, 50, 100, 150);

Согласно документам Unity цвета должны быть инициализированы со значениями от 0 до 1, а не с большими числами.Я предполагаю, что если вы измените значение вашей переменной color соответственно, это решит проблему.Остальная часть вашего кода выглядит следующим образом: здесь .

Попробуйте следующее:

Color color = new Color(0.39f, 0.196f, 0.39f, 0.588f);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...