如何在Unity中的3D点绘制球体或点?
我喜欢在3D点阵列上绘制具有特定小半径的小球体或点。我在Prefabs中使用了Sphere GameObject,并在需要绘制时实例化它。由于我绘制了很多,系统无法处理。如何在Unity中的3D点绘制球体或点?
我需要绘制的方法是
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中保存参考,并直接从中读取)。
为了优化这个,你可以事先创建所有的gameobjects(实例化它们)(editorMode或in start),而不是改变它们的位置。如果你只是改变他们的位置,并且停止在框架中使用Instantiate/Destroy EVERY时间,这会给你带来不稳定的结果,它们是你在第一种方法中的主要问题。对于第二个,这段代码创建了一个网格,定义了它的顶点,但它们几乎都只是点,如果你想让它们显示出来,你必须为它们定义trianlges和法线。如果你想使用这种方法,阅读更多关于网格的知识,但我不认为这会给你想要的。
谢谢阿尔曼。我做了一些点和SetActive(false);然后我做了SetActive(true);逐个。 – batuman
当你说系统无法处理它时,你是什么意思?怎么了? – Programmer
程序变得非常慢,鼠标不能移动等。 – batuman