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