Maison  >  Article  >  développement back-end  >  Unity 3D discute brièvement des problèmes rencontrés dans l'état d'exécution du Shader et dans le mode de rendu.

Unity 3D discute brièvement des problèmes rencontrés dans l'état d'exécution du Shader et dans le mode de rendu.

little bottle
little bottleavant
2019-04-29 18:03:094197parcourir

Le Shader dans Unity dispose de quatre modes de rendu, qui sont :

——Opaque(不透明)
——Cutout(镂空)
——Fade(隐现)
——Transparent(透明)

J'ai déjà rencontré un besoin, j'ai besoin d'ajouter un effet de gel à un objet de jeu spécifique, mais à mon Shader
est un Shader complètement gelé et sa valeur de couleur ne peut pas être ajustée via les paramètres. Plus tard, mon collègue m'a dit que je pouvais
changer la valeur Alpha de l'objet lui-même en modifiant le mode de rendu, la première étape a donc été de trouver le code sur Internet concernant la modification du mode de rendu du Shader d'exécution, comme suit.
http://www.voidcn.com/article...

Tutoriels associés :

Tutoriel vidéo C#

Ensuite, il y a des opérations de code simples ,comme suit.

       //获取目标身上的渲染组件
       var renderer = GetComponentsInChildren<renderer>();
       // 建立一个冰冻数组 第二个数组元素是事先找好的冰冻特效
       Material[] frostMatetials = new Material[2] { renderer.material,
        frostEffect };
       //添加冰冻特效到人物身上的数组中
       renderer.materials = frostMatetials;
       //实例化一个渲染模式变量
       var fadeMode = SetMaterialRenderingMode.RenderingMode.Fade;
       //根据网上的方法更改你的 Shader 渲染模式为 Fade
           
      SetMaterialRenderingMode.SetMaterialRenderingModeMethod(
      renderer.materials[0],fadeMode);</renderer>
Étant donné que la valeur Alpha de Color est en lecture seule et ne peut pas être modifiée, mais Color peut être modifiée, vous devez donc obtenir la valeur RVB de l'

objet cible Color, puis instancier une Color et utilisez le constructeur pour le modifier comme vous le souhaitez. La valeur Alpha souhaitée. Comme suit :

       Color currentcolor03 = new Color
        {
            a = 0.8f,
            r = renderer.materials[0].color.r,
            g = renderer.materials[0].color.g,
            b = renderer.materials[0].color.b
        };
        //替换目标 Color 属性就可以实现了
En fait, cette méthode n'est pas très bonne, principalement parce que le Shader donné ne peut pas modifier la valeur de l'attribut. Plus tard, j'ai eu un Shader qui peut changer la valeur de l'attribut

, et les choses sont devenues beaucoup plus simples.

Unity 3D discute brièvement des problèmes rencontrés dans létat dexécution du Shader et dans le mode de rendu.

C'est le matériel que j'ai obtenu. Vous pouvez trouver le Shader contenu dans le matériau à travers le matériau, et vous pouvez voir les paramètres correspondant à chaque valeur.

Unity 3D discute brièvement des problèmes rencontrés dans létat dexécution du Shader et dans le mode de rendu.

Dans ce cas, la modification ne doit être effectuée qu'en appelant la méthode Material.SetFloat(); et des méthodes similaires. Il y a deux paramètres

entre parenthèses. . L'un est un paramètre de type String, indiquant que le paramètre que vous souhaitez modifier est obtenu via String, et le second est la valeur modifiée.

Pendant cette période, j'ai rencontré un problème. Après de longues recherches, j'ai découvert qu'il s'agissait d'un problème avec le compilateur. Lorsque j'ai utilisé la première méthode, je pouvais modifier le mode de rendu en mode normal conditions, et j'ai utilisé Trois couleurs sont remplacées dans l'ordre pour obtenir l'effet de dégradé, mais si je sélectionne cet objet dans le panneau

Hiérarchie, l'objet en changement reviendra soudainement à l'état par défaut avant le changement, ou si
vous le sélectionnez à l'avance Le même effet apparaîtra si l'objet doit être modifié, c'est-à-dire que cet objet de jeu ne peut pas être sélectionné dans l'état de compilation et que son état de rendu ne peut pas être visualisé dans le panneau Inspecteur. avec un rendu à l'exécution Des mots pour
décrire ce comportement,
Si vous modifiez le mode de rendu d'un objet de jeu Shader au moment de l'exécution, alors l'affichage de son mode de rendu entraînera la réinitialisation de ses propriétés de mode de rendu
.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer