最新消息:

Unity 绘制曲线

本例通过 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 绘制曲线

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者