在Unity里怎么实现双面都显示材质

2025-01-06 06:56:10
推荐回答(2个)
回答1:

Unity内置的Shader,都是单面效果

其实用改写Shader的方法可以很方便的实现双面材质。
Unity里有3种Shader方式:
1.Fixed Function Shaders 
2.Vertex and Fragment Shaders
3. Surface Shaders
关于这部分的详细介绍,请参考官方的教程。
这三种方式里,都可以通过直接在Shader代码头部添加一个Cull off 语句,实现强制双面渲染。
但是直接用Cull off的方式 有个重大的缺陷,这材质从两面看无论贴图、颜色、反光、照明情况,都是一模一样的,这并不符合大多数实际情况的常识。
在第1和第2种Shader里,是可以通过在一个渲染子程序里用两个渲染Pass来实现双面不同效果的,这部分网上的资料也很多,写起来也很简单直接。

这里主要讨论的是第三种也是最常用的Surface Shader的双面不同效果的实现。
Surface Shader是不能写在Pass里的,所以要实现它的双面不同效果就要用其他变通的办法。
网页链接

回答2:

不是太明白你说的意思。。。如果把上面你写的那句,。改为.,是没有问题的,不知道你说的错误指的是什么?如果你这个bieren上面没有renderer组件的话,会报空引用的错误,不过你都该颜色了,肯定有渲染组件的才对。。。还有,lerp是个差值渐变,你后面参数写个1是什么意思。。。都是1了,到头了,你还用差值??最后的控制完全是代码逻辑问题,再简单不过了吧,控制谁就给谁设置开关,不管是把代码附在每一个bieren上,还是设置数组,用个int变量来控制都是很容易的事情吧。。。单个控制的代码完整如下:publicGameObjectbieren;publicColorcolorStart;publicColorcolorEnd;privatefloatt;voidStart(){}voidUpdate(){bieren.renderer.material.color=Color.Lerp(colorStart,colorEnd,t);t+=Time.deltaTime;}别忘了在检视面板把bieren物体拖上去就行