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

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

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. Rust linux 系统接口使用
  2. AS4下搭建cacti
  3. 快速记忆python函数-让Python程序快速提升30%的技巧
  4. HGOI 20181103 题解
  5. 接口结构_适用于Mac系统的API接口调试应用
  6. Python自动化运维开发----基础(四)列表基础
  7. 在Linux中查看所有正在运行的进程
  8. cocos2d-x游戏开发(十三)细说回调函数
  9. Android: AndroidStudio使用OpenCV-Java
  10. mysql连接主备_mysql主备配置方法
  11. 代码整理工具_整理了 11 个好用的代码质量审核和管理工具
  12. 内联函数和宏定义的区别
  13. it招聘上说熟悉linux系统,运维入门:细说Linux,做IT必看
  14. JavaScript实现飞机大战小游戏
  15. 2020.01.18【NOIP提高组】模拟B 组——总结——探险者拉罗
  16. 雨人系统ORA-01821,时间无法识别
  17. Windows安装redis教程
  18. 模块化多电平变换器,MMC载波移相脉冲宽度调制
  19. Ubuntu 18.04配置及美化 (20.04 / 22.04基本相同)
  20. 用python3实现HDU爬虫(后续可能更新VJ)2016.11.4更新

热门文章

  1. oracle创建表空间出错的原因和解决办法
  2. centos 定时删除文件_Centos 定时清理文件(Shell ) | 剑花烟雨江南
  3. vcs linux版本软件下载,软件下载 - Git中文网-GitLab中文网
  4. 想了解硬创IDC法则,看这49页干货PPT就够了
  5. 第四阶段笔记 React
  6. 微信小程序scroll-view重新加载数据,滚动条回到顶部
  7. DataTables Editor 2.0.7 for JS
  8. 计算机硬件有什么专业,中国人民银行2020秋招专业分类:计算机硬件技术类有什么专业?...
  9. Java:2022年最流行的Web开发Java框架
  10. [原]数据科学教程:R语言与NoSQL