当更改renderer.material.color时,Gameobjects消失

我使用这个代码生成一个对象数组:

while(currentPosition.z < poolSize){ var ringObj = GameObject.Instantiate(ring) as GameObject; ringObj.transform.position = currentPosition; ringObj.GetComponent<Renderer>().material.color = new Color (1.0f, 0f, 0f); // Adds the ring to the pool. pool[(int)currentPosition.z] = ringObj; updateCurrentPosition (); } 

这工作正常,没有这一行:

 ringObj.GetComponent<Renderer>().material.color = new Color(Random.Range(0.0f,1.0f), Random.Range(0.0f,1.0f), Random.Range(0.0f,1.0f)); 

应该随机化对象的颜色。 问题是,代替这样做,整个代码只会用标准材质颜色生成一个对象(我可以在层次结构视图中看到它),然后停止生成。 此外,材料不会改变颜色。

我不明白为什么会发生这种情况。 有人可以向我解释这个吗? 我正在使用Unity 5.3.4f1。 谢谢。

把它放在场景中的一个空的GameObject上:

 public class TestColourAndPosition : MonoBehaviour { void Start () { for (int i = 0; i < 10; i++) { GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); cube.transform.position = new Vector3(i * 2.0f, 0, 0); cube.GetComponent<Renderer>().material.color = new Color(Random.Range(0.0f,1.0f),Random.Range(0.0f,1.0f),Random.Range(0.0f,1.0f)); } } void Update () { } } 

生成随机材质颜色或简单的GameObject定位没有问题。

所以我怀疑你的问题是在这之前,并且正在破坏一些导致崩溃的价值。

我建议你使用上面的内容,并慢慢稳步地朝你想要的方向努力。 并且不要调用updateCurrentPosition() (在Update()LateUpdate() ),直到您可以静态/一次closures对象,而不会遇到任何问题。 一旦所有其他工作正常,就切换到3D模型,以防出现模型问题 – 不太可能,但可能。

故事的道德当难住,恢复到最小的testing案例,并从那里开始。 随着代码的不断增加testing – 所以你知道事情开始失败的确切变化。