如何在 Unity 中的 3D 点绘制球体或点?

How to plot sphere or dots at 3D points in Unity?

我喜欢在 3D 点阵列上绘制具有一定小半径的小球体或点。我在 Prefabs 中使用 Sphere GameObject 并在需要绘制时实例化它。由于我的图多,系统处理不了

我需要的绘图方式是

for (int i = 1; i < 200; i++)
{
    for (int j = 0; j < i; j++)
    {
       Instantiate(dot, start[j], new Quaternion(0,0,0,0));
       GameObject.Destroy(GameObject.FindWithTag("dot"), 0.01f);
    }
}

因为它是从1变成200,所以我把它们都销毁了,系统也处理不了。

所以我改成

for (int i = 1; i < 200; i++)
{
    for (int j = 0; j < i; j++)
    {
        //Here devicePlots.Count is same as i
        Mesh mesh = new Mesh();
        mesh.vertices = devicePlots.ToArray();
        Color[] colors = new Color[devicePlots.Count];
        int[] indices = new int[devicePlots.Count];
        for (int j = 0; j < devicePlots.Count; j++)
        {
            indices[j] = j;
            colors[j] = Color.red;
        }
    }
}

但是什么也没有出来。

我的查询是 (1)如果使用Instantiating GameObject的第一种方法是正确的方法,如何使系统能够处理。 (2)如果第二种方法合适,为什么我看不到点? 我是 Unity 的新手。谢谢

首先,让我们看一下第一种方法 这里的主要问题,以及系统无法处理计算的原因(我假设它花费的时间太长并且统一冻结),是因为你使用 Instantiate/Destroy (FindWithTag 也是,你最好只保存参考 Start , 并直接从中读取) 进行大量迭代。

为了优化这一点,您可以事先(编辑器模式或开始时)创建所有游戏对象(实例化它们),而不是更改它们的位置。如果你只是改变他们的位置,这应该会给你即时的结果,并且停止在框架中每次使用 Instantiate/Destroy,他们是你在第一种方法中的主要问题。

至于第二个,这段代码正在创建一个网格,定义它的顶点,但它们本质上只是点,如果你想显示它们,你必须为它们定义三角形和法线。如果您想使用这种方法,请阅读有关网格的更多信息,但我认为这不会满足您的需求。