工作中发现以前学的编程知识都过于表面。学校里更过的关注数据结构,还有其他知识的教学,知识拆分过于仔细,教数据结构就是数据结构,从不会穿插数据结构在什么情况下使用,网络就是网络,也没有用数据结构来搭建网络什么的。没有详细的做法。总的来说,实践太少。数据结构固然重要,但是在功能实现过程中,没有一个完整的软件编程思想贯穿整个工程是不够的。从单机,到电脑连接电脑,到电脑连接网络的程序或者说是软件编写出来后才知道,学计算机没有一个大局观和一种从01到现实世界的世界观是真不行。浅薄认知,大神勿喷!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using System.IO;public class PaintView : MonoBehaviour
{#region 属性//绘图shader&material[SerializeField]private Shader _paintBrushShader;private Material _paintBrushMat;//清理renderTexture的shader&material[SerializeField]private Shader _clearBrushShader;private Material _clearBrushMat;//默认笔刷RawImage[SerializeField]private RawImage _defaultBrushRawImage;//默认笔刷&笔刷合集[SerializeField]private Texture _defaultBrushTex;//renderTextureprivate RenderTexture _renderTex;//默认笔刷RawImage[SerializeField]private Image _defaultColorImage;//绘画的画布[SerializeField]private RawImage _paintCanvas;//笔刷的默认颜色&颜色合集[SerializeField]private Color _defaultColor;//笔刷大小的sliderprivate Text _brushSizeText;//笔刷的大小private float _brushSize;//屏幕的宽高private int _screenWidth;private int _screenHeight;//笔刷的间隔大小private float _brushLerpSize;//默认上一次点的位置private Vector2 _lastPoint;//生成透明图片public RawImage RawImageObject;bool isCreate=false ;public Canvas Canvas_Paint;//获取鼠标点float dx;float dy;public  int  speed = 50;int i=0;//保存图片的名字序号,每发送一次加一string _name="";#endregionvoid Start(){InitData();}private void Update(){//将ui坐标转换成屏幕坐标,将鼠标坐标转换成屏幕坐标,然和进行坐标处理Vector2 start = RectTransformUtility.WorldToScreenPoint(Camera.main ,RawImageObject.GetComponent <RectTransform >().position );//Vector2 end = Input.GetTouch(0).position;Vector2 end = Input.mousePosition ;if (isCreate == true){// if(Input.GetTouch (0).phase ==TouchPhase .Moved  ){//僵硬的移动/*RawImageObject.GetComponent<Animator>().SetBool("move",true );RawImageObject.GetComponent<Animator>().SetBool("move", false); * *///if(RawImageObject.GetComponent<Animator >().GetCurrentAnimatorStateInfo(0).normalizedTime>=1.0f){RawImageObject . transform.Translate(Vector3.Normalize(end-start )*(Vector3.Distance(start ,end )/(speed /Time.deltaTime )));//speed越大就移动越慢越柔顺//}//RawImageObject.transform.position = Vector3.MoveTowards(start, end, 10 * Time.deltaTime);//float step=speed*Time.deltaTime ;// RawImageObject.transform.localPosition=new Vector3 (Mathf.Lerp(start.x,end.x,step ),Mathf.Lerp (start.y,end.y,step ),0);//  }}}#region 外部接口public void SetBrushSize(float size){_brushSize = size;_paintBrushMat.SetFloat("_Size", _brushSize);}public void SetBrushTexture(Texture texture){_defaultBrushTex = texture;_paintBrushMat.SetTexture("_BrushTex", _defaultBrushTex);_defaultBrushRawImage.texture = _defaultBrushTex;}public void SetBrushColor(Color color){_defaultColor = color;_paintBrushMat.SetColor("_Color", _defaultColor);_defaultColorImage.color = _defaultColor;}/// <summary>/// 选择颜色/// </summary>/// <param name="image"></param>public void SelectColor(Image image){SetBrushColor(image.color);}/// <summary>/// 选择笔刷/// </summary>/// <param name="rawImage"></param>public void SelectBrush(RawImage rawImage){SetBrushTexture(rawImage.texture);}/// <summary>/// 设置笔刷大小/// </summary>/// <param name="value"></param>public void BrushSizeChanged(Slider slider){//  float value = slider.maxValue + slider.minValue - slider.value;SetBrushSize(Remap(slider.value,300.0f,30.0f));if (_brushSizeText == null){_brushSizeText=slider.transform.Find("Background/Text").GetComponent<Text>();}_brushSizeText.text = slider.value.ToString("f2");}/// <summary>/// 拖拽/// </summary>public void DragUpdate(){if (_renderTex && _paintBrushMat){if (Input.GetMouseButton(0))LerpPaint(Input.mousePosition);}}/// <summary>/// 拖拽结束/// </summary>public void DragEnd(){if (Input.GetMouseButtonUp(0))_lastPoint = Vector2.zero;}#endregion#region 内部函数//初始化数据void InitData(){_brushSize = 180.0f;_brushLerpSize = (_defaultBrushTex.width + _defaultBrushTex.height) / 2.0f / _brushSize;_lastPoint = Vector2.zero;if (_paintBrushMat == null){UpdateBrushMaterial();}if(_clearBrushMat==null)_clearBrushMat = new Material(_clearBrushShader);if (_renderTex == null){_screenWidth = Screen.width;_screenHeight = Screen.height;_renderTex = RenderTexture.GetTemporary(_screenWidth, _screenHeight, 24);_paintCanvas.texture = _renderTex;}Graphics.Blit(null, _renderTex, _clearBrushMat);}//更新笔刷材质private void UpdateBrushMaterial(){_paintBrushMat = new Material(_paintBrushShader);_paintBrushMat.SetTexture("_BrushTex", _defaultBrushTex);_paintBrushMat.SetColor("_Color", _defaultColor);_paintBrushMat.SetFloat("_Size", _brushSize);}//插点private void LerpPaint(Vector2 point){Paint(point);if (_lastPoint == Vector2.zero){_lastPoint = point;return;}float dis = Vector2.Distance(point, _lastPoint);if (dis > _brushLerpSize){Vector2 dir = (point - _lastPoint).normalized;int num = (int)(dis / _brushLerpSize);for (int i = 0; i < num; i++){Vector2 newPoint = _lastPoint + dir * (i + 1) * _brushLerpSize;Paint(newPoint);}}_lastPoint = point;}//画点private void Paint(Vector2 point){if (point.x < 0 || point.x > _screenWidth || point.y < 0 || point.y > _screenHeight)return;Vector2 uv = new Vector2(point.x / (float)_screenWidth,point.y / (float)_screenHeight);_paintBrushMat.SetVector("_UV", uv);Graphics.Blit(_renderTex, _renderTex, _paintBrushMat);}/// <summary>/// 重映射  默认  value 为1-100/// </summary>/// <param name="value"></param>/// <param name="maxValue"></param>/// <param name="minValue"></param>/// <returns></returns>private float Remap(float value, float startValue, float enValue){float returnValue = (value - 1.0f) / (100.0f - 1.0f);returnValue = (enValue - startValue) * returnValue + startValue;return returnValue;}void Clear(RenderTexture destTexture){Graphics.SetRenderTarget(destTexture);GL.PushMatrix();GL.Clear(true, true, Color.clear);GL.PopMatrix();}public void OnClickClear(){Clear(_renderTex);}void Create(RenderTexture destTexture) {//将这个透明抠图传值给目标iamgeGraphics.SetRenderTarget(destTexture);int width = Screen.width;int heigth = Screen.height;//创建一个屏幕大小的纹理,Rgb32Texture2D tex = new Texture2D(width ,heigth ,TextureFormat.ARGB32 ,false );tex = renderTtoTexture2dT(destTexture);//读取书写内容自定义纹理tex.ReadPixels(new Rect(0,0,width, heigth),0,0);//保存前面对纹理的修改tex.Apply();//编码成PNG格式byte[] bytes = tex.EncodeToPNG();//销毁没用的图片纹理Destroy(tex);//将字节保存为图片,路径只有在PC端对图片进行读写File.WriteAllBytes(Application.dataPath + "/签名"+ i +".png",bytes );//这个是将图片存在手机沙盒中,手机读写File.WriteAllBytes(Application.dataPath +"/onMekey.png",bytes );// RawImageObject.texture = destTexture;//让后清除写字板上的/*GL.PushMatrix();GL.Clear(true, true, Color.clear);GL.PopMatrix();*/}public void OnClickCresate(){Create(_renderTex);i = i + 1;//让序号加一isCreate = true;}public Texture2D  renderTtoTexture2dT(RenderTexture destTexture){if(destTexture ==null )return null ;int width = destTexture.width ;int height = destTexture.height;Texture2D tex = new Texture2D(width, height, TextureFormat.ARGB32, false);RenderTexture.active = destTexture;tex.ReadPixels(new Rect(0,0,width,height ),0,0);tex.Apply();RenderTexture.active = null;return tex;}#endregion}

unity有个很大的区别就是,光有代码,没有场景,你很难看出什么。致敬初学的你。有需要留言发源文件!

unity ——写字软件,并保存到电脑源码相关推荐

  1. 最新好看的自适应手机版软件APP下载类网站源码,游戏软件应用网站源码,自适应手机端Pbootcms模板

    自适应手机软件APP下载类网站源码/游戏软件应用网站源码/自适应手机端 Pbootcms模板 测试环境:Linux  nginx1.18  PHP7.3 下载地址:自适应手机端软件APP下载网站源码 ...

  2. 手zhuan手机软件app下载排行网站源码(需要自取)

    demo软件园每日更新资源,请看到最后就能获取你想要的: 1.嵌入式Qt实战教程 PDF 高清版 嵌入式Qt实战教程 是配合Qt GUI程序设计的指导教材,独立于任何Qt编程教科书.主要内容有常用GU ...

  3. 最新软件开发企业网站Pbootcms模板源码

    正文: 最新软件开发企业网站Pbootcms模板源码+小程序开发代理展示 完整版演示图在压缩包,有兴趣自行去查看,本文只放了一部分. 这程序只需要把文字图片换成你自己的或者其他类型的网站的即可,PC+ ...

  4. 软件导航页源码+可封装APP/下载软件引流整站源码

    正文: 完整标题: 源码介绍: APP软件应用下载导航网站源码/APP分享下载页引流导航网站源码带后台版 这款源码 安装非常便捷干净,源码只有十几MB 只需要上传源码修改数据库连接信息即可使用. 后台 ...

  5. Unity一键图集生成工具,附源码 (基于NGUI和TexturePacker)

    https://blog.uwa4d.com/archives/NGUI_SplitChannels.html Unity一键图集生成工具,附源码 (基于NGUI和TexturePacker) 作者: ...

  6. APP软件应用下载导航网站源码+搭建教程

    APP软件应用下载导航网站源码/APP分享下载页引流导航网站源码带后台版. 功能简介: 1.源码包中带有安装教程 2.网站自适应PC+手机自适应 3.用户可以自行封装成app应用引流导航 4.可以在网 ...

  7. unity mysql生成cexcel_【C#附源码】数据库文档生成工具支持(Excel+Html)

    [2015] 很多时候,我们在生成数据库文档时,使用某些工具,可效果总不理想,不是内容不详细,就是表现效果一般般.很多还是word.html的.看着真是别扭.本人习惯用Excel,所以闲暇时,就简单的 ...

  8. Linux软件安装管理 - CentOS (三) ---- 源码包管理

    1. 软件包管理简介 2. rpm命令管理(Redhat Package Manager) 3. yum在线安装 4. 源码包管理 4.1 源码包和RPM包的区别 4.1.1 区别 安装前:概念上的区 ...

  9. Qt+ffmpeg+x264远程协助软件Weekday技术原理及源码剖析

    前言: 很久没有打理博客了.最近有点烦,teamviewer用的挺习惯的,突然不香了.虽然改用mstsc+加自己云服务器的方式也还行.但突然就萌发了为啥不自己试着写一个的想法.刚好项目空档几天,于是便 ...

最新文章

  1. 听歌识曲原理探究以及样例代码
  2. AJPFX关于Set接口学习笔记及总结
  3. 使用 git 下载linux 源码
  4. Nginx如何反向代理网站和设置虚拟主机
  5. 链接多个数据库的方法
  6. boost::lambda::switch_statement用法的测试程序
  7. 关于opencv中Mat赋值(浅拷贝,深拷贝)原理
  8. 信息学奥赛一本通 1113:不与最大数相同的数字之和 | OpenJudge NOI 1.9 07
  9. 深入理解PHP+Mysql分布式事务与解决方案
  10. 【盘点】imx6的应用
  11. 如何获取到微信公众号的网址
  12. 1一10到时的英文单词_1英语(1到10的英语单词)
  13. android模拟器定制,定制Android模拟器skin
  14. 无憾,2019!加油,2020!
  15. 中国驾照的类型和可驾驶汽车类型
  16. mooc程序设计与算法(三)C++面向对象程序设计 类和对象提高 编程作业 5:魔兽世界之一:备战
  17. 视频:电脑显卡知识科普
  18. 作为打工人,普通人努力的意义何在?
  19. 牛奶可乐经济学之Q12:为什么公司宁愿奖励员工一辆免费的宝马汽车,而不是等值的现金?
  20. 洪荒:不周山上的绝世大能(二)

热门文章

  1. VS code安装Grammarly插件后,如何登陆个人账号?
  2. 蛋白质芯片查找与GEO2R进行初步分析
  3. 【PCB工程师必备】3D元件封装库
  4. 什么是数字货币、数字金融 和区块链?
  5. 我要进大厂第五讲:阿里面经第二篇
  6. 图像增强评价指标学习之——结构相似性SSIM
  7. 发挥“中国智造1%”的威力 阿里云打造ET工业大脑
  8. python看不懂代码_爬虫参考,看不懂呀。
  9. python读取npy文件 mse_Tensorflow 和 SSIM的那些事
  10. Fielding 博士论文阅读笔记(一)