Unity Shader 在UnityEditor中显示正常,打包后不显示的问题

纠结了两天的问题,在Unity中用如下代码画折线统计图,在UnityEditor中正常工作,打包成可执行文件后,看不到画出来的折线。

void DrawLine(ArrayList dataList,ArrayList colorList){
string str;//
float value;//
float afterMoveMax = valueYMax - ((valueYMax + valueYMin)/2);
float scaleRate = positionYMax / afterMoveMax;

for(int i = 0; i < dataList.Count; i++){
GameObject go = new GameObject("FMLine" + i);
go.tag = "line";
go.layer = 9;// 0 is "3DLayer" layer
LineRenderer lineRen = go.AddComponent<LineRenderer>();
lineRen.material = new Material(Shader.Find("Particles/Additive"));
Color c = (Color)colorList[i];
go.renderer.material.SetColor("_TintColor",c);
lineRen.SetColors(c,c);
lineRen.SetWidth(0.1f,0.1f);

ArrayList theList = (ArrayList)dataList[i];

lineRen.SetVertexCount(theList.Count);

for(int j = 0; j < theList.Count; j++){
str = (string)theList[j];
value = float.Parse(str);

value = value - ((valueYMax + valueYMin)/2); //move
value = scaleRate * value; // scale

//NSDebug.Log("DrawLine:"+value);
Vector3 pos = new Vector3(positionXMin + j * (xLength/(maxCount - 1)),value,0);
lineRen.SetPosition(j,pos);

}//end for "j"

}
}//end DrawLine 

以上代码中,标红的地方,我们new Material的时候用到了Shader.Find()方法,参数是一个字符串,这儿很容易出错;如果只是写错了字符还好,我们在UnityEditor中Run的时候就会报错,没有找到字符串所指的Shader。假如我们所有的材质球都是用代码new Material,然后Find Shader,就像上述代码所做的那样。Unity在编译的时候是忽略掉字符串的,Unity那么多内置的Shader是不会编译进去的, 除非创建一个材质球,使用了某个Shader,并且这个材质球被场景中的某个GameObject引用,那么这个Shader才会被编译进最后的可执行文件中,才能用Find("XxxXxxx")在运行时找到。

猜你喜欢

转载自blog.csdn.net/jimoduwu/article/details/12710139