本例通过 GL 图像库记录鼠标移动的轨迹并且将其以曲线的形式显示在屏幕当中,具体实现原理是:记录鼠标在 Game 视图中移动时每一点的坐标,然后将鼠标移动的坐标存储在链表中,使用绘制方法 OnPostRender() 遍历链表中记录的鼠标坐标点,最后通过 GL 图像库绘制线段的方法将这些点两两连成一条线段即可,具体代码如下所示。
using UnityEngine; using System; using System.Collections.Generic; public class CSharp : MonoBehaviour { public Material material; //绘制线段材质 private List<Vector3> lineInfo; void Start() { lineInfo = new List<Vector3>(); //初始化鼠标线段链表 } void Update() { lineInfo.Add(Input.mousePosition); //将每次鼠标改变的位置存储进链表 } void OnGUI() { GUILayout.Label("当前鼠标x轴位置:"+Input.mousePosition.x); GUILayout.Label("当前鼠标y轴位置:"+Input.mousePosition.y); } void OnPostRender() {//此绘制方法由系统调用 if (!material) { Debug.LogError("请给材质资源赋值"); return; } material.SetPass(0); //设置该材质通道,0 为默认值 GL.LoadOrtho(); //设置绘制2D图像 GL.Begin(GL.LINES); //表示开始绘制,绘制类型为线段 int size = lineInfo.Count; //得到鼠标点信息的总数量 for(int i =0; i< size-1; i++) {//遍历鼠标点的链表 Vector3 start = lineInfo[i]; Vector3 end = lineInfo[i+1]; DrawLine(start.x,start.y,end.x,end.y); //绘制线段 } GL.End(); //结束绘制 } void DrawLine(float x1,float y1,float x2,float y2) {//绘制线段,需要将屏幕中某个点的像素坐标点除以屏幕宽或高 GL.Vertex(new Vector3(x1/Screen.width, y1/Screen.height, 0)); GL.Vertex(new Vector3(x2/Screen.width, y2/Screen.height, 0)); } }
在上述代码中,我们通过 Update() 方法获取当前鼠标的位置,将每帧的鼠标位置存储在 lineInfo 链表中,然后在 OnPostRender() 中遍历这个链表,将链表中记录的鼠标坐标点连接起来绘制在屏幕当中。效果如下:
好了,Unity 绘制曲线 就分享到这里,非常感谢你的来访。如果你喜欢本站,请不要忘记收藏本站,以便下次继续访问;也可以 关注站长微博 随时获取最新动态。你的支持就是我最大的动力!
转载请注明:爱维科斯 » Unity 绘制曲线
如果文章对你有帮助,欢迎点击上方按钮打赏作者