我正在使用Unity3D进行鱼类射击游戏。我正在为鱼类实施水下腐蚀作用。我在Unity的StandardAsset中使用“BlobLightProjector”,附带脚本,每帧都改变纹理:
public Texture2D[] frames;
private int frameIndex;
private Projector projector;
...
// repeat every frame
projector.material.SetTexture("_ShadowTex", frames[frameIndex]);
frameIndex = (frameIndex + 1) % frames.Length;
我的列表焦散纹理如下所示:
现在问题是我希望投影机只影响鱼的上部(即使我将鱼旋转到任何方向),这看起来像这样:
你能给我一些建议怎么做,或者其他解决方案不使用投影机是好的。
答案 0 :(得分:0)
对不起,我没有任何代码,但我希望这至少会朝着正确的方向迈出一小步
答案 1 :(得分:0)
您需要通过以下方式修改资产\标准资产\效果\投影机\ Shaders \ ProjectorLight.shader :
if(PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
结构中的像素着色器:v2f
half fade : TEXCOORD3;
而不是仅传递顶点位置:appdata_base
并通过将v2f vert (appdata_base v)
附加到v.
来修改对该位置的调用。vertex
。 o.fade = saturate(mul(unity_ObjectToWorld, v.normal).y);
钳位到0-1,矩阵saturate()
转换为世界空间。最后将渐变应用于像素着色器mul()
中的结果(我将范围增加8,因为否则值永远不会比1亮,但这取决于您的喜好)
texS.rgb *= _Color.rgb * 8.0 * i.fade;