You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity 2D平台游戏:IEnumerator间隔生成平台失效,每帧生成问题求助

问题排查与修复方案

核心问题分析

你的代码逻辑框架是正确的,但出现每帧生成平台的异常,大概率是以下几个原因导致:

1. 协程被多次启动

检查场景中是否存在多个挂载了ButterPlatformCollision脚本的物体——每个物体的Start()方法都会独立启动一次协程,多个协程并行运行会让平台生成频率远超预期。

修复:确保场景中仅保留一个该脚本实例,或者在启动协程前增加防重复判断:

private bool _isCoroutineRunning = false;

void Start()
{
    if (!_isCoroutineRunning)
    {
        _isCoroutineRunning = true;
        StartCoroutine(SpawnPlatforms());
    }
}

2. spawnInterval被误设为0

检查Unity Inspector面板中,该脚本的spawnInterval参数是否被意外设为0(或极小值)。WaitForSeconds(0)会直接跳过延迟逻辑,导致协程每帧执行一次生成操作。

修复:在Inspector中把spawnInterval设为预期的间隔值(比如1),或者在代码中添加数值保障:

public float spawnInterval = 1f;

void Awake()
{
    // 强制限制最小间隔,避免误设导致的异常
    spawnInterval = Mathf.Max(spawnInterval, 0.1f);
}

3. 额外代码修正

你的碰撞回调方法名称有误,Unity不会触发OnColliderEnter2D,需根据需求改为物理碰撞或触发器回调:

// 物理碰撞回调(需双方都有Rigidbody)
void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.CompareTag("Delete"))
    {
        Destroy(collision.gameObject);
    }
}

// 触发器回调(需勾选Collider的Is Trigger)
// void OnTriggerEnter2D(Collider2D collider)
// {
//     if (collider.gameObject.CompareTag("Delete"))
//     {
//         Destroy(collider.gameObject);
//     }
// }

同时建议给生成的平台添加自动销毁逻辑,避免场景对象过多影响性能:

Rigidbody2D platformInstance = Instantiate(platform, platpos, platform.transform.rotation);
platformInstance.velocity = new Vector2(speedleft, 0);
// 5秒后自动销毁平台,可根据需求调整时长
Destroy(platformInstance.gameObject, 5f);

内容的提问来源于stack exchange,提问作者user22411435

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:03:34