我正在创建一款测量玩家反应时间的智能手机游戏。我想显示一个图表,显示每次点击的时间,以及显示平均值的线。
我想放图的图片:
这是可以使用Unity实现的,还是我应该使用其他软件来完成这项工作?
我的反应时间变量存储在数组中。
答案 0 :(得分:2)
您可以使用一些选项在Unity中创建行。
1:LineRenderer:非常难以获得复杂的结果
2:支付Vectrosity:更复杂,更合适的插件。
3:使用平面和一些代码制作自己的图表。我有一个WIP插件做这个方法,我得到了非常好的结果。如果对此有任何疑问,我可以帮助你。
答案 1 :(得分:0)
如果您使用的是标准Unity对象(带有Transform组件),我认为LineRenderer组件可以满足您的需求。
如果您使用的是Unity UI(并且需要一个带有RectTransform的组件),您可以在这里查看:http://forum.unity3d.com/threads/new-ui-and-line-drawing.253772/
看看来自jonbro5556的帖子,他显然是为Unity UI创建了一个线组件(我还没有对它进行过测试,但值得一看)
答案 2 :(得分:0)
您可以尝试动态折线图-资产商店中提供的插件
或
您可以尝试以下github仓库,该仓库能够绘制折线图。
您需要更改LineGraphManager脚本中的以下行以进行实时Feed
void Start(){
// adding random data
int index = 120;
for(int i = 0; i < index; i++){
GraphData gd = new GraphData();
gd.marbles = Random.Range(10,47); // insert your data instead of random one
graphDataPlayer1.Add(gd);
}
// showing graph
ShowGraph();
}
答案 3 :(得分:0)
因此,我为necro-post感到抱歉,但是我试图为一个项目完成类似的工作,并想出了这个(如下)来绘制一种示波器图。我以为我会发布基本信息。它在可移动的GUI.Window中绘制图形。目前没有“风吹草动”。它只是绘制了大量的随机值,但可以用作其他人的起点。
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// Draws a basic oscilloscope type graph in a GUI.Window()
/// Michael Hutton May 2020
/// This is just a basic 'as is' do as you wish...
/// Let me know if you use it as I'd be interested if people find it useful.
/// I'm going to keep experimenting wih the GL calls...eg GL.LINES etc
/// </summary>
public class Graph : MonoBehaviour
{
Material mat;
private Rect windowRect = new Rect(20, 20, 512, 256);
// A list of random values to draw
private List<float> values;
// The list the drawing function uses...
private List<float> drawValues = new List<float>();
// List of Windows
private bool showWindow0 = false;
// Start is called before the first frame update
void Start()
{
mat = new Material(Shader.Find("Hidden/Internal-Colored"));
// Should check for material but I'll leave that to you..
// Fill a list with ten random values
values = new List<float>();
for (int i = 0; i < 10; i++)
{
values.Add(Random.value * 200);
}
}
// Update is called once per frame
void Update()
{
// Keep adding values
values.Add(Random.value * 200);
}
private void OnGUI()
{
// Create a GUI.toggle to show graph window
showWindow0 = GUI.Toggle(new Rect(10, 10, 100, 20), showWindow0, "Show Graph");
if (showWindow0)
{
// Set out drawValue list equal to the values list
drawValues = values;
windowRect = GUI.Window(0, windowRect, DrawGraph, "");
}
}
void DrawGraph(int windowID)
{
// Make Window Draggable
GUI.DragWindow(new Rect(0, 0, 10000, 10000));
// Draw the graph in the repaint cycle
if (Event.current.type == EventType.Repaint)
{
GL.PushMatrix();
GL.Clear(true, false, Color.black);
mat.SetPass(0);
// Draw a black back ground Quad
GL.Begin(GL.QUADS);
GL.Color(Color.black);
GL.Vertex3(4, 4, 0);
GL.Vertex3(windowRect.width - 4, 4, 0);
GL.Vertex3(windowRect.width - 4, windowRect.height - 4, 0);
GL.Vertex3(4, windowRect.height - 4, 0);
GL.End();
// Draw the lines of the graph
GL.Begin(GL.LINES);
GL.Color(Color.green);
int valueIndex = drawValues.Count - 1;
for (int i = (int)windowRect.width - 4; i > 3; i--)
{
float y1 = 0;
float y2 = 0;
if (valueIndex > 0)
{
y2 = drawValues[valueIndex];
y1 = drawValues[valueIndex - 1];
}
GL.Vertex3(i, windowRect.height - 4 - y2, 0);
GL.Vertex3((i - 1), windowRect.height - 4 - y1, 0);
valueIndex -= 1;
}
GL.End();
GL.PopMatrix();
}
}
}
我希望它很有用(可能不是对OP而是...)
迈克尔