【问题标题】:Creating a graph in Unity在 Unity 中创建图形
【发布时间】: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


【解决方案1】:

对不起,我在 cmets 中误导了你。 LineRenderer 是一个组件,所以简单地做new LineRenderer() 是不行的。预计将添加到GameObject。摆脱阵列,您将不需要它。您可以在 while 循环的第一行执行LineRenderer lineRenderer = gameObject.AddComponent&lt;LineRenderer&gt;();,这应该可以解决您的问题。您的游戏对象将添加大约 40 个不同的 LineRenderer 组件。但是,如果您打算访问 LR 并对其进行操作,那么保留该数组可能会在未来有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多