2015-09-13 2 views
1

j'écrit ce qui suit Shader: me ditPourquoi ce Shader génère-t-il une erreur d'analyse lorsqu'il est donné en tant que chaîne au constructeur Material?

Shader "Custom/SimpleShader" { 
    Properties { 
     _MainTex("Base (RGB)", 2D) = "white" { } 
    } 

    SubShader { 
     Pass { 
      ZTest Always 
      Cull Off 
      ZWrite Off 

/* LINE 16*/CGPROGRAM 
#pragma vertex vert 
#pragma fragment frag 
#include "UnityCG.cginc" 

      struct v2f { 
       float4 pos : SV_POSITION; 
       float2 uv : TEXCOORD0; 
       float2 uvb : TEXCOORD1; 
      }; 

      uniform sampler2D _MainTex; 
      uniform sampler2D _Texture0; 
      uniform fixed _Alpha0; 

      v2f vert(appdata_img v) 
      { 
       v2f o; 
       o.pos = mul(UNITY_MATRIX_MVP, v.vertex); 
       o.uv = MultiplyUV(UNITY_MATRIX_TEXTURE0, v.texcoord); 
       o.uvb = MultiplyUV(UNITY_MATRIX_TEXTURE0, v.texcoord); 
       return o; 
      } 

      fixed4 frag(v2f i) : SV_Target 
      { 
       fixed4 col = tex2D(_MainTex, i.uv); 
       col.rgb += (tex2D(_Texture0, i.uvb).rgb * _Alpha0); 
       return col; 
      } 

      ENDCG 
     } 
    } 
    Fallback off 
} 
Unité

qu'il ya une "Syntax Error" en ligne 16 (voir note). Cela se produit, lorsque je mets ce texte dans un string et que je donne ce string au constructeur Material(string contents). Cependant, lorsque je place le texte dans un fichier .shader et l'importe de la manière habituelle, le shader est accepté et ne produit pas d'erreur.

Répondre

0

This documentation concernant le constructeur Material(string contents) (ou plutôt son homologue JavaScript) dit que:

[...] Création de matériaux ainsi que prend en charge les shaders simples (ceux de la fonction fixe). Si vous avez besoin d'un shader de surface ou de shaders de vertex/pixel, vous devez créer un asset shader dans l'éditeur et l'utiliser.

Ainsi, la réponse est que fragment- et/ou vertex-shaders ne sont pas pris en charge de cette façon.