最新消息:

Unity 绘制曲线

编程 BetaStar 5940浏览

你好,今天是 2017年09月25日,星期一,农历八月初六,非常感谢你的来访。现在分享的是: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 绘制曲线

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

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