我喜欢在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的新手。感谢。
答案 0 :(得分:1)
首先,让我们看看第一种方法 这里的主要问题,以及系统无法处理计算的原因(我认为它需要太长时间和统一冻结),是因为你使用Instantiate / Destroy(FindWithTag,你最好只是在Start中保存引用) ,并在大量迭代中直接读取。
为了优化这一点,你可以事先创建所有游戏对象(实例化它们)(编辑模式或开始),而不是改变它们的位置。如果你只是改变它们的位置,并且在框架中每次停止使用Instantiate / Destroy,这应该会给你带来狡猾的结果,它们是你在第一种方法中的主要问题。
至于第二个,这个代码是创建一个网格,定义它的顶点,但它们只是点,如果你想要它们显示你必须为它们定义trianlges和法线。如果你想使用这种方法,请阅读有关网格的更多信息,但我不认为这会给你你想要的东西。