如何在跨场景脚本中实现循环?游戏卡车资源收集问题咨询
问题解决方案
一、更优的场景管理方案
- 放弃频繁场景切换,改用单场景加载+动态实例化/销毁建筑:将所有建筑做成预制体,根据玩家当前需要展示的建筑,动态加载到场景中,隐藏或销毁其余建筑。卡车可在同一场景内持续存在,避免场景切换导致的状态丢失。
- 若必须保留多场景架构,使用场景异步加载+全局对象池:把卡车放入独立的“全局场景”(始终处于加载状态),其余建筑场景采用异步加载/卸载方式。这样卡车的状态不会随建筑场景切换重置,能持续追踪其位置与运行状态。
二、卡车位置与时长计算
1. 获取精确位置
- 无论采用单场景还是全局场景方案,直接读取卡车的
Transform.position(以Unity为例)或对应引擎的位置属性即可,因为卡车始终处于加载状态,位置数据不会丢失。 - 若需跨场景记录位置,可将卡车的位置信息存储在全局静态类或ScriptableObject(Unity)中,场景切换时自动同步该数据。
2. 行驶+装卸总时长计算
- 行驶时长:计算卡车当前位置到目标建筑位置的直线距离,除以卡车行驶速度得到基础行驶时间;若存在路径障碍,可使用寻路系统(如Unity NavMesh)获取实际路径长度,再除以速度得到准确时长。
- 装卸时长:给每个建筑设置固定装卸时间参数(比如小型仓库10秒、大型工厂20秒),或根据当前建筑的资源产量动态调整(资源越多装卸时间越长)。
- 总时长 = 行驶时长 + 装卸时长,可提前计算并展示给玩家。
三、后台运行循环逻辑
完全可以实现后台运行:
- 将卡车的行驶、资源收集逻辑放在独立的逻辑脚本中,挂载到全局存在的对象上(如全局场景的卡车或专门的GameManager)。
- 禁用脚本的“依赖场景激活”选项(Unity中可取消脚本的场景依赖设置,或用
DontDestroyOnLoad标记对象),确保场景切换时逻辑仍在后台运行。 - 逻辑循环可通过协程(Coroutine)或定时器实现:每帧更新卡车位置,到达目标后触发装卸逻辑,完成后自动前往下一个建筑,全程无需依赖场景显示。
内容的提问来源于stack exchange,提问作者polelord
相关产品推荐
相关产品推荐

