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

Unity游戏添加计分文本及解决球重复重生bug求助

问题分析与解决方案

核心问题根源

这种无限生成球体的bug,基本是触发逻辑未正确终止或重生逻辑处理不当导致:

  • 用OnTriggerStay检测掉落会持续触发生成,而非仅触发一次
  • 重生时未销毁旧球,反而不断实例化新球
  • 重生逻辑未加锁,同一掉落事件被多次调用

具体修复步骤

1. 替换触发检测方法

将检测掉落的代码从OnTriggerStay改为OnTriggerEnter,确保仅触发一次:

private void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Ball"))
    {
        ResetGame();
    }
}

2. 优先重置现有球(而非重复生成)

不要每次掉落都实例化新球,直接重置已有球的位置与物理状态:

public Transform[] spawnPoints; // 两个球的重生点
public GameObject[] balls; // 场景中已存在的两个球

private void ResetGame()
{
    // 执行加分逻辑
    ScoreManager.Instance.AddScore();

    // 重置球的位置和物理属性
    for (int i = 0; i < balls.Length; i++)
    {
        balls[i].transform.position = spawnPoints[i].position;
        balls[i].transform.rotation = spawnPoints[i].rotation;
        Rigidbody rb = balls[i].GetComponent<Rigidbody>();
        rb.velocity = Vector3.zero;
        rb.angularVelocity = Vector3.zero;
    }
}

若必须实例化新球,需先销毁旧球:

public GameObject ballPrefab;

private void ResetGame()
{
    ScoreManager.Instance.AddScore();

    // 销毁所有旧球
    foreach (GameObject ball in GameObject.FindGameObjectsWithTag("Ball"))
    {
        Destroy(ball);
    }

    // 生成新球
    Instantiate(ballPrefab, spawnPoints[0].position, spawnPoints[0].rotation);
    Instantiate(ballPrefab, spawnPoints[1].position, spawnPoints[1].rotation);
}

3. 添加触发锁防止重复调用

用布尔变量锁住重生逻辑,避免短时间内多次触发:

private bool isResetting = false;

private void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Ball") && !isResetting)
    {
        isResetting = true;
        ResetGame();
        Invoke(nameof(UnlockReset), 0.5f);
    }
}

private void UnlockReset()
{
    isResetting = false;
}

4. 检查触发器设置

确保竞技场底部的掉落检测触发器:

  • 勾选Is Trigger
  • 碰撞范围不覆盖重生点
  • 图层设置仅与球的图层触发碰撞

额外注意

  • 不要在Update中编写掉落检测逻辑,避免每帧重复执行
  • 加分逻辑需确保仅在单次掉落后加1,不要嵌套在循环内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:35:14