团结:景观生成一段时间后停止

时间:2018-01-31 10:28:48

标签: c# unity3d

我正在构建一个滚动游戏。相机设置为以设定的速度滚动。有一个触发器游戏对象连接到相机,它正在摧毁它创建的所有地块,并告诉景观创建下一行。这项工作很棒,但经过一段时间后它就停止了创建线条。我的想法是,我需要改变世界规模,但这需要无限。

景观生成器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LandscapeGeneration : MonoBehaviour {
public int sizeX;
public int sizeZ;

public int zIndex = 0;
public GameObject roadBlock;

// Use this for initialization
void Start () {
    GenerateTerrain();

}

void GenerateTerrain()
{
    for(int x = 0; x < sizeX; x++)
    {
        for(int z = 0; z < sizeZ; z++)
        {
            zIndex = z;
            Instantiate(roadBlock, new Vector3(x, 0, z), Quaternion.identity);
        }
    }
}

public void GenerateRow(int row)
{
    if (row == zIndex)
    {
        zIndex++;
        for (int x = 0; x < sizeX; x++)
        {
            Instantiate(roadBlock, new Vector3(x, 0, zIndex), Quaternion.identity);
        }
    }
}
}

Block Shredder

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BlockShredder : MonoBehaviour {

public GameObject landscape;

public void OnTriggerEnter(Collider other)
{
    LandscapeGeneration script = landscape.GetComponent<LandscapeGeneration>();
    float x = other.gameObject.transform.position.x + 44;
    Destroy(other.gameObject);
    script.GenerateRow(int.Parse(x.ToString()));
}
}

我的问题是为什么世界一代停止了,我该如何解决?

2 个答案:

答案 0 :(得分:1)

你没有提供太多信息,例如它停止的大致世界位置,但我不认为这是问题

Unity应该处理足够大的世界价值观。检查this post用户测试的位置值(大于1&#39; 000&#39; 000)的位置值。值越大,从Unity获得的准确度就越低。我记得在某个地方看到超过100&000的价值开始失去精确度。

我的猜测是碎纸机在某个时刻停止被叫

以下是您可以尝试调试的步骤:

  • 检查对象是否确实停止生成。也许它们只是在您的视图之外生成。在编辑器场景层次结构中查找对象

  • 使用Debug.Log在触发器功能中打印内容。是不是被叫了?

  • 你确定碎纸机没有自行删除(检查场景中的育儿)

  • 当它停止创建时,您是否还有旧对象或者Shredder是否删除了所有内容?

至于你的设计,这里有一个关于无限跑步者通常工作方式的建议:

相机应保持固定。这是你的世界向后移动,当从相机中删除块时,以及之前创建的新块。这样你就可以避免超出Unity中的位置(即使需要一些时间,请参阅上面的段落)。也可以更容易地看到编辑器中发生的事情,因为所有事情总是或多或少地发生在同一个地方。最后放置元素更容易,因为您不必找到相对于相机的正确位置,或者将所有内容都放在相机上。

切换到这样的系统不应该太难并且可以帮助您调试,因为您将清楚地看到编辑器中的视图3d视图

答案 1 :(得分:0)

我发现问题是,在Shredder中我将x值作为行传递,但行值应为z。它越过了地图的宽度,因为没有更多的块要检查,它不会创建块。