展厅公司,做的多半是交互软件,还有互动装置啥的,这次公司要自己开发一款双端通信的画图软件,虽说不是很难,但做的过程中也遇到很多坑,这里把过程记录一下,分享给大家。

画图,涂鸦,由于需求是要求在绘制完成后,可以发送给其他主机,并且是要在图片上涂鸦,所以在一开始,我考虑的就是直接修改图片像素点。

Unity的图片类型,是在原图的基础上创建副本,这也就是说,利用引擎api修改图片像素后,原图的像素并未真正被修改,修改的只是副本的数据,话虽如此,但这完全不会影响到功能的实现,修改的是副本,读取的也是副本。

如果要动态修改像素,需要将可读可写打开。

texture.SetPixel(x, y, color);

texture:为要设置的Texture2D图片,x,y为像素坐标

其优点在于,简单易于理解,操作方便,但缺点也很明显,图片中动则数十万的像素点,在进行修改的过程中对性能影响很大,并且最关键的一点在于,绘画涂鸦的形状比较难自定义,所以我才用了遮罩。

在研究了几份效果不错的涂鸦软件后,我发现他们要么是采用linerenderer,要么是用RenderTexture结合GL来绘画,后者虽然能很好的实现绘画效果,并且是基于GPU处理,速度很快,但还是无法满足实现绘画后可传输,并在绘画过程中有着绘画界限,只能在图片的固定区域中作画的要求。

所以,我最后考虑的是用线条渲染器加遮罩,并在绘画的过程中记录坐标点,然后转成json字符串发送出去。

对于linerenderer的遮罩,unity并没有内置这类功能,我在网上找了一下,也没找到好用的插件,于是研究了一下shader,自己做了一个简单遮罩。

遮罩的实现原理是利用模板测试,linerenderer的实际图像会超出图片范围,但只有处于图片的范围中才会显示.

              //这段标签放在SubShader开头或是单独在pass中定义都可以,但一般都和深度测试放在一起Stencil{   Ref 3Comp equal//Pass keep//保持当前颜色缓冲}   Stencil{   Ref 3Comp alwaysPass replace//将参考值写入缓冲区}//上面这段为需要被遮挡的物体的设置//下面是遮罩需要的设置,将当前数值写入缓冲中,Comp为渲染的条件,遮罩由于需要一直显示,        //所以是 always,而被遮挡的物体需要将当前缓冲的值,与自己的Ref语句中的值进行比较,相等则进行渲染

然后找到当前unity版本的内置Shader,在Sprite的shader中,加上自己自定义的模板测试

实际显示效果如下

目前可以看到,在图片的边缘显示效果并不理想,我们可以通过调整图片的顶点位置,来对可显示区域进行限制。

左上角的Generate按钮可以一键生成顶点,左边的滑动条则是调整顶点的数量百分比,默认是最小值,这个值越大,生成的轮廓也就越平滑。

角色的动画刚开始是扣帧,就是一个图片一个图片的摆位置,然后旋转角度,后面才开始用骨骼做动画,骨骼动画不仅大量节省制作时间,并且对动画效果的提升也有很大帮助。

完整的制作思路如下:

1.素材处理,图片进行分层,将各个关节分开,有利于用于动画处理,和制作遮罩。

2.处理图片的shader和材质,在官网下载当前unity编辑器的对应版本shader后,倒入引擎,加入上面的模板测试代码。

2.利用line render进行绘图,需要修改line render的材质和shader,修改模板测试代码部分。

3.对图片每一个关节部位的模板值进行修改,当这个数值与line render的模板值对应时,才会现实线条。

这里只提供思路,不涉及具体代码,关于画线还有shader部分,网上已有大量资料,这里不多做赘述。

unity开发画图程序相关推荐

  1. Unity实现画图程序

    核心脚本: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Mo ...

  2. Unity 开发 Hololens2 MR应用程序

    Unity2020.3 LTS 开发 Hololens2 MR应用程序 提示:作者使用的是 Unity 2020.3.34f1 LTS (Unity2020.3 的其他版本也做了测试,OpenXR 要 ...

  3. HTC vive VR设备软硬件安装+运行unity开发的VR程序

    总结在HTC vive VR开发过程中的HTC vive的安装调试 1.首先确保电脑的配置满足要求: 进入官网,测试电脑是否满足要求 链接:https://www.vive.com/us/produc ...

  4. Unity 之 LayaAir 的集成开发小程序之工具下载和基本使用

    Unity 之 LayaAir 的集成开发小程序之工具下载和基本使用 目录 Unity 之 LayaAir 的集成开发小程序之工具下载和基本使用 一.LayaAir 简介 二.工具下载 三.在Unit ...

  5. Unity开发日记【第一天】——素材的导入及地图的建立

    前言:本人由于兴趣和未来的工作原因开始尝试接触和学习Unity开发,为了避免忘记一些东西所以写下这些博客算是一个记录. 目录 一.软件的安装与配置 二.如何编辑素材以及Tilemap的使用 三.图层和 ...

  6. unity开发入门_Unity游戏开发终极入门指南

    unity开发入门 Unity is a great tool for prototyping everything from games, to interactive visualisations ...

  7. python画图程序有图-python画图程序

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 今天做的是用python实现画图,画出你想要的图案,只要你的想象力足够丰富,以及 ...

  8. 使用Unity开发RPG游戏完整指南(全)

    使用Unity开发RPG游戏完整指南(全) - GameRes游资网 关注公众号 风色年代(itfantasycc) 200G Unity资料合集送上~ 本教程教大家如何使用Unity创建一个RPG游 ...

  9. unity开发_Unity开发人员在Ludum Dare 30上大放异彩

    unity开发 The history of the Ludum Dare development contest arguably stretches back to the dawn of gam ...

最新文章

  1. Python:Scrapy 框架简单介绍
  2. 牛!Python 也能实现图像姿态识别溺水行为了!
  3. 谷歌为什么把几十亿行代码放在一个库?
  4. 这件事,阿里爱了10年
  5. abp.event.on与abp.event.off使用
  6. 简单两步干掉WordPress里面的fonts.googleapis
  7. 选择日期保存后日期变成前一天(avue date)
  8. CASE WHEN语句中加IN应该如何使用
  9. Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用
  10. 剑指offer面试题55 - II. 平衡二叉树(后序遍历)(剪枝)
  11. python 图像压缩pca_在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
  12. Windows核心编程_获取鼠标指定位置的RGB颜色值
  13. Big Sur系统更新后,运行变慢?使macOS Big Sur更快运行的12个技巧
  14. Unity下载安装详细教程
  15. TPC,TPCC,TPMC(计算机性能衡量指标) -----
  16. 最好用的共享文件服务器,文件共享有哪些方式,哪种比较好?
  17. jetson nano开电源_NVIDIA Jetson Nano开发者套件入门指南
  18. openwrt luci中文汉化
  19. VOS的处理逻辑测试分析
  20. 区块链改革(链改)行动第二次联席会议在京召开

热门文章

  1. 龙之谷微信该服务器已爆满,微信一区爆满 还能进吗
  2. 蓝牙协议分析2---协议架构
  3. js中判断文本框是否为空的两种方法
  4. 火药味渐浓的屏幕战争:大屏、中屏、小屏三分天下
  5. powerbi 服务主体认证
  6. 【公开课预告】:超分辨率技术在视频画质增强领域的研究与应用
  7. 自动驾驶路径规划——基于概率采样的路径规划算法(RRT、RRT*)
  8. imac 使用 linux终端,苹果iMac一体机无盘启动的方案与教程(附相关软件下载)
  9. 2022app出海:Instagram营销策略详解
  10. 苹果汽车发布?这个发布会脑洞我服