Unity之屏幕画线
Posted tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity之屏幕画线相关的知识,希望对你有一定的参考价值。
using UnityEngine;
using System.Collections;
public class DrawRectangle : MonoBehaviour {
public Color rectColor = Color.green;
private Material rectMat = null;//画线的材质 不设定系统会用当前材质画线 结果不可控
// Use this for initialization
void Start () {
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;
}
void Update () {
}
void OnPostRender() {//画线这种操作推荐在OnPostRender()里进行 而不是直接放在Update,所以需要标志来开启
Rect rect0 = new Rect(0,0,0,0);
drawRect(rect0);
}
void drawRect(Rect rect0){
if (! rectMat)
return;
GL.PushMatrix();//保存摄像机变换矩阵
rectMat.SetPass( 0 );
GL.LoadPixelMatrix();//设置用屏幕坐标绘图
// GL.Begin(GL.QUADS);
// GL.Color( new Color(rectColor.r,rectColor.g,rectColor.b,0.1f) );//设置颜色和透明度,方框内部透明
// GL.Vertex3( 0,0,0);
// GL.Vertex3( Screen.width/2,0,0);
// GL.Vertex3( Screen.width/2,Screen.height/2,0 );
// GL.Vertex3( 0,Screen.height/2,0 );
// GL.End();
float startX = rect0.x;
float startY = rect0.y;
float endX = rect0.xMax;
float endY = rect0.yMax;
GL.Begin(GL.LINES);
GL.Color(rectColor);//设置方框的边框颜色 边框不透明
GL.Vertex3( startX,startY,0);
GL.Vertex3( endX,startY,0);
GL.Vertex3( endX,startY,0);
GL.Vertex3( endX,endY,0 );
GL.Vertex3( endX,endY,0 );
GL.Vertex3( startX,endY,0 );
GL.Vertex3( startX,endY,0 );
GL.Vertex3( startX,startY,0);
GL.End();
// GL.Begin(GL.LINES);
// GL.Vertex3(0, 0, 0);
// GL.Vertex3(Screen.width, Screen.height, 0);
// GL.End();
GL.PopMatrix();//恢复摄像机投影矩阵
}
void drawRects(Rect[] rects){
if (! rectMat)
return;
GL.PushMatrix();//保存摄像机变换矩阵
rectMat.SetPass( 0 );
GL.LoadPixelMatrix();//设置用屏幕坐标绘图
// GL.Begin(GL.QUADS);
// GL.Color( new Color(rectColor.r,rectColor.g,rectColor.b,0.1f) );//设置颜色和透明度,方框内部透明
// GL.Vertex3( 0,0,0);
// GL.Vertex3( Screen.width/2,0,0);
// GL.Vertex3( Screen.width/2,Screen.height/2,0 );
// GL.Vertex3( 0,Screen.height/2,0 );
// GL.End();
GL.Begin(GL.LINES);
for(int i = 0 ; i < rects.Length ; i++){
Rect rect0 = rects[i];
//Debug.Log(rect0);
float startX = rect0.x;
float startY = rect0.y;
float endX = rect0.xMax;
float endY = rect0.yMax;
GL.Color(rectColor);//设置方框的边框颜色 边框不透明
GL.Vertex3( startX,startY,0);
GL.Vertex3( endX,startY,0);
GL.Vertex3( endX,startY,0);
GL.Vertex3( endX,endY,0 );
GL.Vertex3( endX,endY,0 );
GL.Vertex3( startX,endY,0 );
GL.Vertex3( startX,endY,0 );
GL.Vertex3( startX,startY,0);
}
GL.End();
// GL.Begin(GL.LINES);
// GL.Vertex3(0, 0, 0);
// GL.Vertex3(Screen.width, Screen.height, 0);
// GL.End();
GL.PopMatrix();//恢复摄像机投影矩阵
}
}
以上是关于Unity之屏幕画线的主要内容,如果未能解决你的问题,请参考以下文章
Unity 实现《物理画线》Draw Physics Line 总览
iPad 有啥方法快速在当前屏幕上做标记 画线吗? 我是要把当前屏幕上的内容要做标记截图发送给别