一般来说他们做涂涂乐都用到shader,可惜渣渣的我不会shader,就算用了shader,我看不懂里面的原理,会让我很烦,所以就另寻他法

无意中看到unity的商店里有一个涂涂乐的免费教程

最终的实现效果:

里面就是不用shader来实现,核心原理大概是使用Render Texture,获取点击模型Uv的位置,然后在Render Texture前创建gameobject色块,到达一定数量,则截图保存给当前材质球,然后删除原来的色块

步骤:

1.创建一个Quad和名字为_canvasCamera相机

2.相机ClearFlags设置为Depth Only,Projection设置为Orthorgraphic,size大概0.5就差不多,自己调整

3.创建一个色块GameObject,加上spriteRenderer

4.再根据最后的图自己设置下

代码写的有点乱,但是菜鸟看菜鸟的代码或许看的比较明白吧

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class TestTurx : MonoBehaviour {
    public RenderTexture _RenderTexture;        //创建的_RenderTexture;
    public Material _QuadMaterial;              //涂涂乐物体上的材质球
    public GameObject _fater;                   //放置显示板中央位置或者所示下面_canvasCamera的子类 vector3(0,0,3)的位置(在Qued前面,不要被Qued遮挡)
    public Camera _canvasCamera;                //观看显示板的相机
    public GameObject instObject;               //色块
    // Use this for initialization
    void Start () {
        print(_canvasCamera.orthographicSize);
}

// Update is called once per frame
void Update () {
        if (Input.GetMouseButton(0))
        {
           GetTextureMap();
        }        
        SavePicture();
    }

void SavePicture()
    {
        if (_fater.transform.childCount >200)   //如果子物体数量大于200个
        {
            RenderTexture.active = _RenderTexture;          //圣典说是激活当前渲染图贴,还没消化完
            Texture2D tex = new Texture2D(_RenderTexture.width, _RenderTexture.height, TextureFormat.RGB24, false);
            tex.ReadPixels(new Rect(0, 0, _RenderTexture.width, _RenderTexture.height), 0, 0);  //读取屏幕像素,并保存
            tex.Apply();
            RenderTexture.active = null;
            _QuadMaterial.mainTexture = tex;                //保存的图片赋值给物体的材质球
            foreach (Transform child in _fater.transform)   //清除子类
            {
                Destroy(child.gameObject);
            }
        }       
    }

void GetTextureMap()
    {
        RaycastHit hit;                     //射线这部分不多说了
        Ray r = Camera.main.ScreenPointToRay(Input.mousePosition);      
        if (Physics.Raycast(r, out hit, 500))
        {
            Debug.DrawLine(transform.position, hit.point, Color.red);
            MeshCollider mesh = hit.collider as MeshCollider;
            if (mesh == null || mesh.sharedMesh == null)    //判断物体上是否有meshCollider,同时mesh里要有对应的纹理
                return;
            Vector2 uv = new Vector2(hit.textureCoord.x, hit.textureCoord.y);//Unity官方API解释:射线射入现场。这textureCoord是射线撞击碰撞机的位置
            print(uv.x + "   " + uv.y);
            GameObject obj = GameObject.Instantiate(instObject);
            obj.transform.SetParent(_fater.transform);
            obj.transform.localPosition = new Vector3(uv.x - _canvasCamera.orthographicSize, uv.y - _canvasCamera.orthographicSize, 0); //没搞懂减是怎么原理,待消化
        }
    }
}

脚本随意挂任意地方

Unity 涂涂乐(不使用shader)相关推荐

  1. hiar sdk for android,HiAR | HiAR SDK for Unity | 涂涂乐开发教程

    本文将向您介绍如何使用 HiAR SDK 创建一个简单的涂涂乐应用. Step 1.基础开发及设置 请先按照"创建 Hello World"中的 Step1-Step4,完成以下工 ...

  2. unity3D 涂涂乐使用shader实现上色效果

    之前我博文里面发过一个简单的通过截图方式来实现的模型上色方法,但是那个方法不合适商用,因为你需要对的很准确才可以把贴图完美截取下来,只要你手抖了一下就会发现贴歪了.那么有没有更好的方法来实现这个效果呢 ...

  3. (示例3)涂涂乐开发教程

    涂涂乐开发教程 本文将向您介绍如何使用 HiAR SDK 创建一个简单的涂涂乐应用. Step 1.基础开发及设置 请先按照"创建 Hello World"中的 Step1-Ste ...

  4. 手把手教你做个AR涂涂乐

    前段时间公司有一个AR涂涂乐的项目,虽然之前接触过AR也写过小Demo,但是没有完整开发过AR项目.不过经过1个多星期的学习,现在已经把项目相关的技术都学会了,在此向互联网上那些乐于分享的程序员前辈们 ...

  5. ​手把手教你做个AR涂涂乐 ​

    前段时间公司有一个AR涂涂乐的项目,虽然之前接触过AR也写过小Demo,但是没有完整开发过AR项目.不过经过1个多星期的学习,现在已经把项目相关的技术都学会了,在此向互联网上那些乐于分享的程序员前辈们 ...

  6. EasyAR涂涂乐代码分析

    来说一下对EasyAR sdk中自带的unity Samples中的Coloring3D这个项目的理解(例子程序可以去官网下载 最后会列出所有用到网站的网址). 这个项目的效果就是我们常见的" ...

  7. unity3D AR涂涂乐制作浅谈

    unity3D AR涂涂乐制作浅谈 AR为现在是虚拟现实较为火爆的一个技术,其中有个比较炫酷的就是AR涂涂乐的玩法,这个技术可以把扫描到的图片上的纹理 粘贴到模型上实现为模型上色的功能,但是我们需要怎 ...

  8. 涂涂乐的详细实现之四--unity3d调用EmguCV实现图片识别

    涂涂乐严格来说有两个版本,一种是前面详细介绍过的,鼠标控制画图截图发送给服务端实现模型上色:另一种是通过实物图彩笔绘图之后通过扫描仪生成图片发送给服务端来实现模型上色. 动物模型有多种,贴图有多种,在 ...

  9. EasyAR4.0使用说明(Unity3D)三----平面图像跟踪扩展:视频播放,涂涂乐

    播放视频 平面图像识别以后播放视频也是一种经常被用到的增强现实的表现方式.通常是截取视频第一帧的图片作为识别图片,识别以后播放视频.这样就给人一个图片动起来的错觉. 在场景中设置Main Camera ...

最新文章

  1. 【 MATLAB 】gallery 中的 uniformdata
  2. linux查看硬盘smart_Linux检测磁盘坏道工具用什么命令
  3. API hook 单步调试
  4. 再论句子中单词的逆序输出
  5. JS开发引用HTML DOM的location和document对象
  6. python pip安装+easy_install
  7. java ArrayList集合
  8. mysql 并发 加锁_MySQL的并发控制与加锁分析
  9. go mysql_build-web-application-with-golang
  10. python deap,安装Deap for Python(Spyder)
  11. 进程间通信之CreatePipe
  12. 使用css3制作正六面体
  13. python牛顿法算立方根_Exercise 1.8 牛顿法求立方根
  14. scratch算立方根
  15. pdf编辑器免安装版_墙裂推荐!功能强大的PDF编辑器最新免安装版!
  16. unittest控制case执行顺序
  17. 深入浅出LSTM学习
  18. iOS手机自带浏览器Safari无法长按保存图片
  19. java中while 和do......while的区别???
  20. Monkey脚本API简介

热门文章

  1. python四边形转矩形_如何用PIL将矩形图像映射成四边形?
  2. 已解决在向有外键表插入数据提示“foreign key constraint fails”
  3. 大型电商网站系统架构演变过程
  4. vue weex 打电话
  5. 美国证券业托管和清算机构的发展与现状
  6. 交叉表 mysql_mysql交叉表查询解决方案整理
  7. 有趣题目和认知合集(持续更新)
  8. 百度云盘照片导入华为相册里_百度网盘传送列表怎样导入手机相册_手机百度网盘下载到相册...
  9. Android 10 状态栏通知图标和下拉状态栏图标为白色问题
  10. 微信小程序-定时刷新发送请求