Unity开发教程:如何在不同Y轴高度生成障碍物
Unity 类FlappyBird模块化管道生成实现
这套实现完全解耦,所有参数支持可视化配置,不需要硬改代码就能适配不同项目需求,直接对接你已经制作完成的管道资源即可。
核心特性
- 支持自定义管道生成点位、Y轴随机高度范围、生成间隔、移动速度
- 自动销毁超出屏幕的管道,无多余内存占用
- 逻辑拆分清晰,后续扩展管道样式随机、间隙动态调整等功能不需要重构核心代码
具体实现
1. 管道单体控制脚本
将以下脚本挂载到你制作好的管道预制体上,负责管道的移动和出屏销毁:
using UnityEngine; public class Pipe : MonoBehaviour { [HideInInspector] public float moveSpeed; private float _destroyBoundary; void Start() { // 自动计算销毁边界:相机左边界外1单位,避免管道在可视范围内消失 _destroyBoundary = Camera.main.ScreenToWorldPoint(Vector3.zero).x - 1f; } void Update() { transform.Translate(Vector3.left * moveSpeed * Time.deltaTime); if (transform.position.x < _destroyBoundary) { Destroy(gameObject); } } }
2. 管道生成器脚本
在场景中新建一个空物体,将以下脚本挂载到这个空物体上,负责按规则定时生成管道:
using UnityEngine; public class PipeSpawner : MonoBehaviour { [Header("基础参数")] public Pipe pipePrefab; public float spawnInterval = 2f; public float pipeMoveSpeed = 2f; [Header("生成范围")] public float minYPosition = -1.5f; public float maxYPosition = 2.5f; private float _timer; void Start() { SpawnSinglePipe(); _timer = spawnInterval; } void Update() { _timer -= Time.deltaTime; if (_timer <= 0) { SpawnSinglePipe(); _timer = spawnInterval; } } void SpawnSinglePipe() { float randomY = Random.Range(minYPosition, maxYPosition); Vector3 spawnPos = new Vector3(transform.position.x, randomY, transform.position.z); Pipe spawnedPipe = Instantiate(pipePrefab, spawnPos, Quaternion.identity); spawnedPipe.moveSpeed = pipeMoveSpeed; } }
使用配置方法
- 将你做好的管道预制体拖到
PipeSpawner组件的pipePrefab字段中,确认预制体已经挂载Pipe脚本 - 调整挂载
PipeSpawner的空物体的X轴坐标,这个坐标就是管道的固定生成点位,一般设置在相机右边界外1-2个单位的位置,避免管道生成过程被玩家看到 - 直接在Inspector面板调整所有参数即可适配你的项目:生成间隔越短、管道速度越快,游戏难度越高;Y轴范围根据你的管道间隙大小调整,保证上下留出足够的通行空间
- 如果需要扩展功能,比如随机生成不同样式的管道、动态调整管道间隙、随游戏进程提升速度,直接在对应脚本里新增逻辑即可,不会影响现有核心逻辑
内容的提问来源于stack exchange,提问作者Trevil Devil
相关产品推荐
相关产品推荐

