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();//恢复摄像机投影矩阵

}
}

 

转载于:https://www.cnblogs.com/huangshiyu13/p/5634698.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值