我们在shader中添加三张贴图来做遮罩,猪脚一张、火盆三张,分别为
_Mask ("Mask", 2D) = "white" {}
_Mask0 ("Mask0", 2D) = "white" {}
_Mask1 ("Mask1", 2D) = "white" {}
在纹理混合中进行如下设置:
SetTexture [_Mask] {combine texture}
SetTexture [_MainTex] {combine texture,texture-previous}
SetTexture [_Mask0] {combine previous,previous-texture}
SetTexture [_Mask1] {combine previous,previous-texture}
SetTexture 的原理在
unity用shader遮罩模拟黑夜火把照明效果
中有说过,这里就不详细说了
总之就是将上一步计算的的alpha通道值减去这张贴图的alpha通道值就是了。
保存一下,回到我们的主界面,将我们的遮罩贴图拖到三个子贴图中,
但是这样场景中只看到了一个光圈。
我们把他的offset都偏移一下,这样三个就齐了。
将光圈对准火盆与光圈跟随猪脚移动原理一样。
下一步让光圈移到火盆处。
我们打开脚本,
脚本中添加:
public GameObject fire;
public GameObject fire0;
然后按照获得俩火盆的位置:
float firex = fire.transform.position.x;
float firey = fire.transform.position.y;
float fire0x = fire0.transform.position.x;
float fire0y = fire0.transform.position.y;
然后就是根据火盆的位置获得遮罩的偏移量:
float offsetfirex=-firex/(Le*2f);
float offsetfirey=-firey/(Wi*2f);
float offsetfire0x=-fire0x/(Le*2f);
float offsetfire0y=-fire0y/(Wi*2f);
最后是改变遮罩的位置:
renderer.material.SetTextureOffset ("_Mask0", new Vector2 (offsetfirex,offsetfirey));
renderer.material.SetTextureOffset ("_Mask1", new Vector2 (offsetfire0x,offsetfire0y));
OK,回到场景运行,测试一下效果不错:
我们最后让火盆的光圈也能和猪脚一样忽大忽小:
我们在如图所示脚本位置添加:
renderer.material.SetTexture("_Mask0",mask[i]);
renderer.material.SetTexture("_Mask1",mask[i]);
具体脚本如下:
f(Time.time>b){
b=b+c;
if(i
选择75222135