Unity3d实现画笔
2015-08-01 10:25
656 查看
本文介绍如何在unity3d中实现画笔的功能
首先画笔需要一个材质 Material,之前在网上找了很多画笔,但是都没说材质怎么生成,导致画不出线来。
"SubShader { Pass { " +
" Blend SrcAlpha OneMinusSrcAlpha " +
" ZWrite Off Cull Off Fog { Mode Off } " +
" BindChannels {" +
" Bind \"vertex\", vertex Bind \"color\", color }" +
"} } }");//生成画线的材质
rectMat.hideFlags = HideFlags.HideAndDontSave;
rectMat.shader.hideFlags = HideFlags.HideAndDontSave;
GL.LoadPixelMatrix();//设置用屏幕坐标绘图
DrawLines(10,10,100,100,Color.red);
GL.PopMatrix();//还原
void DrawLines(float px,float py,float px2,float py2,Color cr)
{
GL.Begin(GL.LINES);
GL.Color(cr);
GL.Vertex3(px,py, 0);
GL.Vertex3(px2,py2, 0);
GL.End();
}
基本过程就这么简单,接下来做一个完整的绘图应用,实现基本的铅笔,直线,画圆,画矩形和输入文字的功能,以及保存文件,打开文件的功能。其中计算直线夹角和判断鼠标是否在线上使用了NN视频聊天组件的功能(免费哦,在Assets\Plugins目录下,聊天功能参考:http://blog.csdn.net/ensue/article/details/47157015)。
界面如图:
程序首先创建一个窗口,在窗口中画线:rcWindow= GUI.Window (1, rcWindow, doMyWindow, "画笔窗口");
所有画笔功能封装在ScriptDraw.cs中(可以修改其中的代码),通过以下接口直接调用:
init(rect) 初始化画笔,指定其工作区域。
onText(x,y,w,h,txt)。添加文字到指定位置。
setCommand(int) 画笔命令 0选择,1画笔,2画直线,4画圆,5画矩形,6输入文字,8删除所选,11全选
vDrawColor(int) 设置颜色
vDrawFont(string) 设置字体名称,由于对unity3d不熟悉,不知道怎么添加有效字体。这个你们自己处理。
vDrawLoadFromFile 从文件打开画笔。
vDrawSaveToFile 保存画笔到文件。
drawDown 鼠标按下。
drawMove 鼠标移动
drawUp 鼠标抬起。
draw() 显示画笔内容。
代码下载:http://download.csdn.net/detail/ensue/8951237
首先画笔需要一个材质 Material,之前在网上找了很多画笔,但是都没说材质怎么生成,导致画不出线来。
创建材质:
Material rectMat = new Material("Shader \"Lines/Colored Blended\" {" +"SubShader { Pass { " +
" Blend SrcAlpha OneMinusSrcAlpha " +
" ZWrite Off Cull Off Fog { Mode Off } " +
" BindChannels {" +
" Bind \"vertex\", vertex Bind \"color\", color }" +
"} } }");//生成画线的材质
rectMat.hideFlags = HideFlags.HideAndDontSave;
rectMat.shader.hideFlags = HideFlags.HideAndDontSave;
应用材质:
rectMat.SetPass(0);通过Opengl 实现画线:
GL.PushMatrix();//保存摄像机变换矩阵GL.LoadPixelMatrix();//设置用屏幕坐标绘图
DrawLines(10,10,100,100,Color.red);
GL.PopMatrix();//还原
void DrawLines(float px,float py,float px2,float py2,Color cr)
{
GL.Begin(GL.LINES);
GL.Color(cr);
GL.Vertex3(px,py, 0);
GL.Vertex3(px2,py2, 0);
GL.End();
}
基本过程就这么简单,接下来做一个完整的绘图应用,实现基本的铅笔,直线,画圆,画矩形和输入文字的功能,以及保存文件,打开文件的功能。其中计算直线夹角和判断鼠标是否在线上使用了NN视频聊天组件的功能(免费哦,在Assets\Plugins目录下,聊天功能参考:http://blog.csdn.net/ensue/article/details/47157015)。
界面如图:
程序首先创建一个窗口,在窗口中画线:rcWindow= GUI.Window (1, rcWindow, doMyWindow, "画笔窗口");
所有画笔功能封装在ScriptDraw.cs中(可以修改其中的代码),通过以下接口直接调用:
init(rect) 初始化画笔,指定其工作区域。
onText(x,y,w,h,txt)。添加文字到指定位置。
setCommand(int) 画笔命令 0选择,1画笔,2画直线,4画圆,5画矩形,6输入文字,8删除所选,11全选
vDrawColor(int) 设置颜色
vDrawFont(string) 设置字体名称,由于对unity3d不熟悉,不知道怎么添加有效字体。这个你们自己处理。
vDrawLoadFromFile 从文件打开画笔。
vDrawSaveToFile 保存画笔到文件。
drawDown 鼠标按下。
drawMove 鼠标移动
drawUp 鼠标抬起。
draw() 显示画笔内容。
代码下载:http://download.csdn.net/detail/ensue/8951237
相关文章推荐
- Unity-Attribute
- Unity Colliders
- unity3d android开发初体验——远程安装调试篇
- Unity5新的AssetBundle系统使用心得
- unity-Animation
- (10)unity入门,unity的应用VR、AR
- 【Unity3D ugui】使用艺术字
- Unity5的AssetBundle的一点使用心得
- Unity中游戏体的消息传递
- 如何防止Unity3D代码被反编译?
- Unity自定义窗体插件工具
- UNITY3D学习笔记10
- 小韵游戏开发学习笔记——第五期:认识Unity基本组件(二)
- Unity3d开发过程记录随笔
- Unity中实现全局管理类的几种方式
- Unity AssetBundle爬坑手记
- Unity3D之在Unity编辑器中添加菜单
- Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh)
- unity 基础:Render Settings
- Vuforia应用之屏幕截图功能