【发布时间】:2018-02-01 13:30:46
【问题描述】:
我正在尝试根据存储在数组中的一些游戏对象的位置在 Unity 中制作图表。到目前为止,这是我的代码。什么是在 2 个连续点之间移动线渲染器,直到它到达最后一个。我想要做的是保留上一行,创建新行并将其移动到下一个点。知道如何实现这一目标吗?非常感谢。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DrawLine : MonoBehaviour {
private LineRenderer lineRenderer;
private LineRenderer[] lineRenderers;
private float counter;
private float dist;
private int i = 0;
public Transform origin;
public Transform destination;
public float lineDrawSpeed;
public GameObject[] Points;
void Start ()
{
lineRenderer = GetComponent<LineRenderer> ();
lineRenderers = new LineRenderer[40];
lineRenderer.startWidth = 0.45f;
lineRenderer.endWidth = 0.45f;
}
void Update()
{
if (StockManager.isReady)
{
Points = GameObject.FindGameObjectsWithTag ("Point");
StartCoroutine (DrawTheLine ());
StockManager.isReady = false;
}
}
IEnumerator DrawTheLine()
{
//lineRenderer.SetPosition (0, Points [0].transform.position);
dist = Vector3.Distance (Points [0].transform.position, Points [1].transform.position);
while (counter < dist && i < Points.Length - 1)
{
lineRenderer.SetPosition (0, Points [i].transform.position);
counter = Time.deltaTime * lineDrawSpeed;
dist = Vector3.Distance (Points [i].transform.position, Points [++i].transform.position);
float x = Mathf.Lerp (0, dist, counter);
Vector3 pointA = Points [i].transform.position;
Vector3 pointB = Points [i++].transform.position;
Vector3 pointAlongLine = x * Vector3.Normalize (pointB - pointA) + pointA;
lineRenderer.SetPosition (1, pointAlongLine);
i--;
yield return new WaitForSecondsRealtime (0.2f);
}
yield return null;
}
}
【问题讨论】:
-
您已经有一个线渲染器数组...您一遍又一遍地使用同一个对象,为什么不使用该数组?
-
@BrandonMiller 抱歉,该数组为空,我忘记将其从代码中删除。我的意思是我尝试使用它,但如果我尝试这样做,我会得到一个空引用异常:lineRenderers[i].SetPoisition in my DrawTheLine() 方法。
-
在您调用 SetPosition 之前,请确保您执行
lineRenderers[i] = new LineRenderer();并且您不会收到错误。 -
@BrandonMiller 我在你告诉我写的那一行得到一个空引用异常。
-
您的图表是 2d 还是 3d?我设法在 System.Drawing 库的帮助下绘制了 2d 图形。我使用 Image 和 Graphics 类来绘制一些线条,然后将 System.Drawing.Image 转换为 Unity Texture2d。我还在 Ubuntu 上测试了这个库,它确实有效。
标签: c# unity3d plot graph draw