【问题标题】:Unity freeze on run, looped InstantiateUnity 在运行时冻结,循环实例化
【发布时间】:2015-01-11 12:33:46
【问题描述】:

我正在尝试用立方体生成一个平面世界,我有几个嵌套的 for 循环来循环坐标并放置每个块。当我运行应用程序时,统一游戏引擎会冻结。据我所知,循环是正确的,应该可以正常工作并退出。我最初认为也许我试图实例化太多对象,所以我大大减少了数量,但我仍然遇到同样的问题。我一直盯着这段代码有一段时间了,找不到问题,所以我想知道是否有人知道这是什么问题?

using UnityEngine;
using System.Collections;

public class Chunk : MonoBehaviour {

public readonly int chunkWidth = 2;
public readonly int chunkHeight = 2;
public GameObject TestBlock;

// Use this for initialization
void Start () {
    spawnChunk (0,0);
}

// Update is called once per frame
void Update () {

}

public void spawnChunk(int posX, int posZ){
    for(int x = 0; x <= chunkWidth; x++){
        for(int y =0; y <= chunkHeight; y++){
            for(int z = 0; x <= chunkWidth; z++){
                //create object
                Instantiate(TestBlock, new Vector3(x + posX, y, z + posZ), Quaternion.identity);
            }
        }
    }
}
}

【问题讨论】:

  • 你确定不只是抛出异常? TestBlock 将为空。
  • 但是在执行时它是在什么时候分配的?您是否尝试过调试代码以检查 spawnChunk 中的值?你能在调试器中跳过对Instantiate 的调用吗?

标签: c# unity3d instantiation freeze


【解决方案1】:

在你最深的for循环中,x总是小于chunkWidth,导致无限循环; z 没有被检查任何东西。

变化:

for(int z = 0; x <= chunkWidth; z++){

到:

for(int z = 0; z <= chunkWidth; z++){

Unity 不应再冻结。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-25
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多