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