Unity内置了GL类 封装了OpenGL,可以通过GL类来实现一些简单的画图操作,
根据Unity官方API来研究一下。
将官方GL的实例代码考到Unity执行后是这个效果
代码中有这样一个回调是属于屏幕渲染的,需要在API里了解一下
public void OnRenderObject()
Unity的生命周期执行顺序中,屏幕渲染会在GameLogic后会执行
其中有几个屏幕渲染回调API来了解一下
官方的GL示例代码 我翻译了一下便于大家理解
其中需要注意的是:
GL.Push 和 GL.Pop 之间写GL代码
GL.Begin 和 GL.End 之间写画线逻辑Begin和End 之间的两个Vector3表示起点和终点
//划线的数量
private int lineCount = 100;
//每条线的长度
private float radius = 3.0f;
//划线使用的材质球
static Material lineMaterial;
/// <summary>
/// 创建一个材质球
/// </summary>
static void CreateLineMaterial()
{
//如果材质球不存在
if (!lineMaterial)
{
//用代码的方式实例一个材质球
Shader shader = Shader.Find("Hidden/Internal-Colored");
lineMaterial = new Material(shader);
lineMaterial.hideFlags = HideFlags.HideAndDontSave;
//设置参数
lineMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
lineMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
//设置参数
lineMaterial.SetInt("_Cull", (int)UnityEngine.Rendering.CullMode.Off);
//设置参数
lineMaterial.SetInt("_ZWrite", 0);
}
}
/// <summary>
/// 使用GL画线的回调
/// </summary>
public void OnRenderObject()
{
//创建材质球
CreateLineMaterial();
//激活第一个着色器通过(在本例中,我们知道它是唯一的通过)
lineMaterial.SetPass(0);
//渲染入栈 在Push——Pop之间写GL代码
GL.PushMatrix();
//矩阵相乘,将物体坐标转化为世界坐标
GL.MultMatrix(transform.localToWorldMatrix);
// 开始画线 在Begin——End之间写画线方式
//GL.LINES 画线
GL.Begin(GL.LINES);
for (int i = 0; i < lineCount; ++i)
{
float a = i / (float)lineCount;
float angle = a * Mathf.PI * 2;
// 设置颜色