如何统计场景中生成对象的初始数量并实现达标触发逻辑?(已关闭)
解决思路与实现方案
通用核心逻辑
不管使用哪种游戏引擎,核心步骤都是以下两点:
- 在所有目标对象生成完毕后统计总数:不要在生成过程中零散计数,等所有生成逻辑执行完成后,一次性获取场景内所有这类对象的数量,存入全局变量(比如
totalCollectibles)。 - 实时对比收集数与总数:每次玩家触碰对象后,
point加1,立即检查point是否等于totalCollectibles,相等则触发通关、结算等特定事件。
各引擎具体实现示例
Unity 场景
假设可收集对象统一标记了标签(比如Collectible),或挂载了同一脚本(比如CollectibleItem):
- 在游戏初始化完成后(比如
Start()方法内,或所有生成逻辑的最后一步)执行统计:// 通过标签统计 int totalCollectibles = GameObject.FindGameObjectsWithTag("Collectible").Length; // 或通过组件统计(精度更高) int totalCollectibles = FindObjectsOfType<CollectibleItem>().Length; - 收集逻辑示例:
void OnTriggerEnter(Collider other) { if(other.CompareTag("Player")) { point++; Destroy(gameObject); if(point == totalCollectibles) { // 触发特定事件,比如加载下一关、显示通关UI TriggerWinEvent(); } } }
Godot 场景
假设可收集对象属于同一组(比如collectibles):
- 在场景加载完成后(比如
_ready()方法内)统计总数:var total_collectibles = get_tree().get_nodes_in_group("collectibles").size() - 收集逻辑示例:
func _on_body_entered(body): if body.name == "Player": point += 1 queue_free() if point == total_collectibles: // 触发事件,比如切换场景 get_tree().change_scene_to_file("res://scenes/WinScene.tscn")
自定义引擎/原生代码场景
如果是自研游戏框架,需要维护全局对象列表:
- 每次生成可收集对象时,将其加入全局数组
collectibleList; - 全部生成完成后,
totalCollectibles = collectibleList.length; - 玩家触碰对象时,从列表中移除该对象,
point++,随后判断point == totalCollectibles是否成立。
注意事项
- 统计时机要准确:必须等所有可收集对象生成完成后再统计,若对象是分批生成(比如随关卡进度刷新),需在每批生成后更新总数,或在最后一批生成完毕后统一统计。
- 动态生成需同步更新:如果中途有新的可收集对象生成,要及时更新
totalCollectibles的值,避免判断逻辑出错。
内容的提问来源于stack exchange,提问作者Susman
相关产品推荐
相关产品推荐

