C# 统一:景观生成在一段时间后停止

C# 统一:景观生成在一段时间后停止,c#,unity3d,C#,Unity3d,我正在制作一个滚动游戏。相机设置为以设定的速度滚动。有一个触发游戏对象连接到相机,它正在摧毁它创建的所有地块,并告诉景观创建下一条线。这项工作很好,但在一小段时间后,它只是停止创建线。我的想法是,我需要改变世界的大小,但这需要改变 景观发生器 using System.Collections; using System.Collections.Generic; using UnityEngine; public class LandscapeGeneration : MonoBehaviour

我正在制作一个滚动游戏。相机设置为以设定的速度滚动。有一个触发游戏对象连接到相机,它正在摧毁它创建的所有地块,并告诉景观创建下一条线。这项工作很好,但在一小段时间后,它只是停止创建线。我的想法是,我需要改变世界的大小,但这需要改变

景观发生器

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);
        }
    }
}
}
块状粉碎机

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()));
}
}

我的问题是为什么世界一代人停止了,我该如何修复它?

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

团结应该处理足够大的世界价值观。检查用户测试大于1'000'000位置值的位置。值越大,从Unity中获得的准确性就越低。我记得在某个地方看到超过100000的数值开始失去精度

我猜碎纸机在某个时候会停止被调用

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

检查对象是否真的停止生成。也许它们只是在你的视野之外产生的。在编辑器场景层次中查找对象

使用Debug.Log打印触发器函数中的内容。它停止被呼叫了吗

你确定碎纸机不会自动删除吗?检查场景中的父项

当它停止创建时,您是否仍有旧对象,或者碎纸机是否删除了所有内容

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

摄像机应该保持固定。正是你们的世界在向后移动,当你们离开相机时,方块会被删除,而之前会创建新的方块。这样,即使需要一些时间,你也可以避免在统一体中的位置超出范围,参见上面的段落。查看编辑器中发生的事情也变得更容易,因为所有事情都或多或少地发生在同一个地方,总是发生在同一个地方。最后,放置图元更容易,因为您不必找到相对于摄影机的正确位置,也不必将所有内容设置为摄影机的父对象


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

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

感谢您输入Toaster。我真的不想移动所有的世界物体,只想移动相机,但如果这是内特跑步者通常的工作方式,那么也许我应该继续。这种方法的好处是一些重要的物体不必移动,例如球员和背景。您甚至可以使背景元素以不同的速度移动以产生视差效果。但这取决于你,我相信你也可以用你的移动摄像机制作一场精彩的比赛。祝你好运!我昨晚更改了它来移动一个游戏对象,所有需要移动的东西都被设置为该对象的子对象。它现在运行得很好。谢谢你的意见