我正在构建一个滚动游戏。相机设置为以设定的速度滚动。有一个触发器游戏对象连接到相机,它正在摧毁它创建的所有地块,并告诉景观创建下一行。这项工作很棒,但经过一段时间后它就停止了创建线条。我的想法是,我需要改变世界规模,但这需要无限。
景观生成器
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()));
}
}
我的问题是为什么世界一代停止了,我该如何解决?
答案 0 :(得分:1)
你没有提供太多信息,例如它停止的大致世界位置,但我不认为这是问题
Unity应该处理足够大的世界价值观。检查this post用户测试的位置值(大于1&#39; 000&#39; 000)的位置值。值越大,从Unity获得的准确度就越低。我记得在某个地方看到超过100&000的价值开始失去精确度。
我的猜测是碎纸机在某个时刻停止被叫
以下是您可以尝试调试的步骤:
检查对象是否确实停止生成。也许它们只是在您的视图之外生成。在编辑器场景层次结构中查找对象
使用Debug.Log
在触发器功能中打印内容。是不是被叫了?
你确定碎纸机没有自行删除(检查场景中的育儿)
当它停止创建时,您是否还有旧对象或者Shredder是否删除了所有内容?
至于你的设计,这里有一个关于无限跑步者通常工作方式的建议:
相机应保持固定。这是你的世界向后移动,当从相机中删除块时,以及之前创建的新块。这样你就可以避免超出Unity中的位置(即使需要一些时间,请参阅上面的段落)。也可以更容易地看到编辑器中发生的事情,因为所有事情总是或多或少地发生在同一个地方。最后放置元素更容易,因为您不必找到相对于相机的正确位置,或者将所有内容都放在相机上。
切换到这样的系统不应该太难并且可以帮助您调试,因为您将清楚地看到编辑器中的视图3d视图
答案 1 :(得分:0)
我发现问题是,在Shredder中我将x值作为行传递,但行值应为z。它越过了地图的宽度,因为没有更多的块要检查,它不会创建块。