2
votes

Unity 2018.3 HDRP - Changer la couleur du matériau par programmation?

J'utilise le nouveau shader HDRP / LitTesselation.

Je souhaite modifier la Couleur de base + Opacité lors de l'exécution:

img

J'ai ajouté ce code au script de l'objet de jeu:

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);
}

Mais il génère un code Hidden / InternalShaderError > erreur dans le shader. Quelqu'un peut-il m'indiquer la bonne direction?


0 commentaires

3 Réponses :


0
votes

Le problème est probablement lié à cette ligne:

Color color = new Color(0.39f, 0.196f, 0.39f, 0.588f);

Selon le Documents Unity , les couleurs doivent être initialisées avec des valeurs de 0 à 1 plutôt qu'avec des nombres plus grands. Je suppose que si vous modifiez la valeur de votre variable couleur en conséquence, cela résoudra le problème. Le reste de votre code semble suivre la forme trouvée ici . P >

Essayez ce qui suit:

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


1 commentaires

Merci. Je l'ai essayé, mais j'ai toujours la même erreur sur le shader: "Hidden / InternalShaderError".



2
votes

Je l'ai fait fonctionner en modifiant ces lignes comme suit:

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


1 commentaires

Cochez cette réponse acceptée et fermez cette question si vous pensez que c'est la bonne solution. :)



0
votes

Ceci est pour 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);
}

J'ai lu une fois que "sharedMaterial" devrait être utilisé à la place de "material". Cependant, je pense que c'était juste une faute de frappe. "sharedMaterial" affecterait TOUS les matériaux HDRP / Lit, je pense.


0 commentaires