失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Unity3D 运用GL屏幕画图(阴阳师画符)

Unity3D 运用GL屏幕画图(阴阳师画符)

时间:2023-10-27 11:01:24

相关推荐

Unity3D  运用GL屏幕画图(阴阳师画符)

运用GL屏幕画图基本效果

阴阳师火了之后,市面上很多游戏又多了一个模块——画符抽卡,可以通过使用Unity自带GL类来实现这个功能,上面一篇博客Unity研究 GL中有关于GL类的初步解析。今天直接来分析需求 看看阴阳师画符抽卡是怎么实现的:

1,绘图——鼠标按下进行拖拽,在屏幕中留下鼠标轨迹。

2,存图——松开鼠标,绘制的图片按比例映射到Texture上。

Unity的GL是通过两点之间连线来构成图像的。

1,通过一个集合List<Vector3> allPoints存储鼠标在屏幕上经过的轨迹(视图坐标系)

if (Input.GetMouseButton(0)){Vector3 tmpView = Camera.main.ScreenToViewportPoint(Input.mousePosition);allPoints.Add(tmpView);}

2,遍历集合,将集合中具有前后关系的点连接起来(点动成线)

/// <summary>/// 使用GL画线的回调/// </summary>public void OnRenderObject(){//创建材质球CreateLineMaterial();//激活第一个着色器通过(在本例中,我们知道它是唯一的通过)lineMaterial.SetPass(0);//设置正交投影GL.LoadOrtho();// 开始画线 在Begin——End之间写画线方式GL.Begin(GL.LINES);GL.Color(Color.red);for (int i = 1; i < allPoints.Count; i++){Vector3 tmpFront = allPoints[i - 1];Vector3 tmpBack = allPoints[i];GL.Vertex(tmpFront);GL.Vertex(tmpBack);}GL.End();//渲染出栈}

3,按照比例映射到图片上

public void Texture(){//像素根据比例映射图片paintText = new Texture2D(300, 400);for (int i = 1; i < allPoints.Count; i++){Vector3 tmpFront = allPoints[i-1];Vector3 tmpBack = allPoints[i];float frontX = paintText.width * tmpFront.x;float frontY = paintText.height * tmpFront.y;float backX = paintText.width * tmpBack.x;float backY = paintText.height * tmpBack.y;//两点之间的缝隙用插值连起来for (int j = 0; j < 100; j++){int tmpX =(int)Mathf.Lerp(frontX, backX, j / 100.0f);int tmpY =(int)Mathf.Lerp(frontY, backY, j / 100.0f);paintText.SetPixel(tmpX, tmpY, Color.red);}//paintText.SetPixel(xx, yy, Color.red);}paintText.Apply();}

如果觉得《Unity3D 运用GL屏幕画图(阴阳师画符)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。