Unity滚动游戏地形生成中断问题排查与修复咨询
地形生成停止的原因及修复方案
让我来帮你拆解问题,找出地形生成停止的核心原因,然后给出可行的修复方案:
一、问题根源分析
完全错误的行索引传递
在你的BlockShredder脚本里,你用other.gameObject.transform.position.x + 44来计算要生成的行索引,这完全是南辕北辙——你的地形是沿z轴滚动生成的,行索引应该和z坐标相关,而不是x坐标!这个错误导致传递给GenerateRow的row值和zIndex完全不匹配,触发不了生成逻辑。过于严苛的生成条件
GenerateRow里的if (row == zIndex)条件把生成逻辑卡死了:只有当传入的row恰好等于当前的zIndex时才会生成新行,但因为第一步的参数错误,这个条件几乎不可能满足,自然地形生成就停止了。
二、具体修复步骤
1. 修正BlockShredder的触发逻辑
我们不需要错误的x坐标计算,只要触发销毁时,直接通知生成下一行即可。如果担心同一行的多个地块重复触发,可以加个记录机制避免重复生成:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BlockShredder : MonoBehaviour { public GameObject landscape; // 记录已经处理过的行,避免同一行多次触发生成 private HashSet<int> processedRows = new HashSet<int>(); public void OnTriggerEnter(Collider other) { LandscapeGeneration script = landscape.GetComponent<LandscapeGeneration>(); // 获取当前销毁地块所在的z行索引(取整避免浮点误差) int currentRowZ = Mathf.RoundToInt(other.transform.position.z); // 只有没处理过的行才触发生成 if (!processedRows.Contains(currentRowZ)) { processedRows.Add(currentRowZ); script.GenerateNextRow(); } Destroy(other.gameObject); } }
2. 重构LandscapeGeneration的生成逻辑
去掉原来不合理的条件判断,改成直接生成下一行的方法,同时修正初始生成后的zIndex值,确保后续生成衔接正确:
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; void Start () { GenerateTerrain(); } void GenerateTerrain() { // 生成初始的sizeX * sizeZ地块 for(int x = 0; x < sizeX; x++) { for(int z = 0; z < sizeZ; z++) { Instantiate(roadBlock, new Vector3(x, 0, z), Quaternion.identity); } } // 初始生成完成后,下一行的z坐标应该是sizeZ(因为初始z从0到sizeZ-1) zIndex = sizeZ; } // 替换原来的GenerateRow,改为直接生成下一行的方法 public void GenerateNextRow() { // 生成当前zIndex对应的整行地块 for (int x = 0; x < sizeX; x++) { Instantiate(roadBlock, new Vector3(x, 0, zIndex), Quaternion.identity); } // 更新zIndex,为下一次生成做准备 zIndex++; } }
三、额外说明
- 这个修复方案实现了无限地形生成:每次销毁一行旧地块,就会在z轴正方向生成一行新地块,配合相机的固定滚动,就能实现无限延伸的地形。
- 如果你是沿其他轴滚动,只需要把代码里的z轴相关逻辑换成对应轴即可。
内容的提问来源于stack exchange,提问作者Tom Hanson
相关产品推荐
相关产品推荐

