——Opaque(不通明) ——Cutout(镂空) ——Fade(隐现) ——Transparent(通明)
之前我碰到一个需求,须要给特定的游戏物体增加一个冰冻的结果,然则给我的 Shader
是一个完整冰冻的 Shader,而且没法经由过程参数调解它的色彩值。以后我的同事告诉我可
以经由过程修正衬着形式变动物体自身的Alpha值完成,所以第一步我寻找了网上关于修正运
行时 Shader 衬着形式的代码,以下。http://www.voidcn.com/article...
相干教程:C#视频教程
然后就是简朴的代码操纵,以下。
//猎取目的身上的衬着组件 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);
因为 Color 的 Alpha 值是只读的不能修正,然则 Color 是能够修正的,所以要猎取目的
物体 Color 的 RGB 值,然后实例一个 Color 用组织函数变动为你想要的 Alpha 值。以下:
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 属性就能够完成了
实在这个要领不是很好,重要是因为所给的 Shader 不能修正属性值,厥后我拿到了能够变动
属性值的Shader,事变就变得简朴了很多。
这是我拿到的材料,能够经由过程材料找到材估中包括的 Shader,内里能够看到每一个值所对应的参数。
如许的话修正就只须要经由过程挪用要领 Material.SetFloat(); 及其相似要领,括号内里是两个
参数一个是 String 范例的参数,示意经由过程 String 猎取想要转变的参数,第二个是变动的值。
这时期我碰到一个题目,末了找了良久发现是编译器的题目,我在用第一种要领的时刻,假如一般
情况下能够修正衬着形式,而且我用了三个 Color 来顺次替代完成了渐变结果,然则假如我在
Hierarchy 面板中选中这个物体那末正在转变的物体就会倏忽变回变动之前的默许状况,或许如
果你预先选中了这个将要变动的物体他也会涌现一样的结果,就是不能在编译状况下选中这个游
戏物体,不能在 Inspector 面板中检察他的衬着状况,末了我得出了一个运行时衬着的词语来
形貌这个行动,
假如你在运行时变动了游戏物体 Shader 的衬着形式,那末检察他的衬着形式会致使他的衬着模
式属性重置。
以上就是Unity 3D 浅谈Shader 运行时状况及衬着形式碰到的题目的细致内容,更多请关注ki4网别的相干文章!