unity 使用shader加rendertexture实现刮刮乐效果

本文转自:http://www.manew.com/thread-113128-1-1.html,请点击链接查看原文。

具体效果如下:
 
要点:

1.我们首先设置两个摄像机,一个是专门渲染笔刷图层(笔刷就是一个挂载spriterender的物体,用来生成rendertexture的渲染),命名为brushCamera,并且要设为dont clear模式:
 


 
之所以要设置为dont clear是为了能够将笔刷的轨迹在rendertexture中记录下来。
然后我们要创建一个笔刷预设体,这个笔刷预设体主要实现笔刷效果:
 

2.然后我们写一个遮罩shader,shader中需要两张图,一张是遮罩的图片(就是图中的蓝色图片),另一张是用于剔除刮痕处遮罩像素的图片,我们将渲染出的rendertexture作为剔除遮罩的图片。输出的像素就是masktexcolor,通过maskcolor.a通道来控制masktexcolor.a通道,实现鼠标滑过的masktex的像素被剔除,从而显示出底层的图片。

个人想法:

     原文的思路是随着鼠标的滑动通过bezier曲线不断生成笔刷来填充rendertexture,个人觉的只需正在鼠标滑动时,将鼠标的屏幕位置转为世界坐标下的位置,然后激活笔刷,将转化后的位置坐标z轴分量调整到遮罩和相机之间的位置,赋值给笔刷即可。

代码比较简单如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DrawRail : MonoBehaviour {

    public GameObject brush;
	
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            brush.SetActive(true);
        }
        if (Input.GetMouseButtonUp(0))
        {
            brush.SetActive(false);
        }
        if (Input.GetMouseButton(0))
        {
            Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            brush.transform.position = new Vector3(pos.x, pos.y, -2);
        }
	}
}

经过测试可以实现效果,但是当鼠标移动过快时会出现不连续的情况,还是原博想的周到啊!


  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值