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

Unity 2D预制体克隆生成平台在特定Y轴位置停止问题求助

问题排查与修复方案

核心问题分析

平台在Y轴约15位置停止生成,大概率是以下原因导致:

  • 每帧调用GameObject.Find可能出现组件获取失败,导致lastY值停滞
  • 生成逻辑在Update中每帧执行,短时间内生成大量平台让y快速追上lastY+5,若相机的lastY不再更新就会停止生成
  • LockCameraY脚本中的lastY可能未正确同步相机实时Y位置

具体修复步骤

1. 缓存相机组件,避免频繁查找

把相机对象和组件提前缓存,不要在Update里重复执行查找操作:

using System.Collections.Generic;
using UnityEngine;

public class Generation : MonoBehaviour
{
    private float x;
    private float y;
    public GameObject bounce;
    private float lastY;
    private LockCameraY cameraLock;

    void Start()
    {
        x = transform.position.x;
        y = transform.position.y;
        GameObject cameraObj = GameObject.Find("Virtual Camera");
        if(cameraObj != null)
        {
            cameraLock = cameraObj.GetComponent<LockCameraY>();
        }
        else
        {
            Debug.LogError("找不到名为Virtual Camera的对象!");
        }
    }

    void Update()
    {
        if(cameraLock != null)
        {
            lastY = cameraLock.lastY;
        }
        SpawnBounce();
    }

    void SpawnBounce()
    {
        Debug.Log("Y value: "+y);
        Debug.Log("Camera position: "+lastY);
        if (y < lastY+5)
        {
            GameObject bounce1 = Instantiate(bounce, new Vector3(Random.Range(-5, 5), y + Random.Range(1, 3), 0), transform.rotation);
            x = bounce1.transform.position.x;
            y = bounce1.transform.position.y;
        }
    }
}

2. 限制生成频率,避免瞬间填满

当前Update每帧调用生成逻辑,可能一帧内生成多个平台导致y瞬间达标。添加计时器控制生成间隔:

// 在Generation类中新增变量
private float spawnTimer = 0f;
private float spawnInterval = 0.2f; // 可调整这个值控制平台生成速度

void Update()
{
    if(cameraLock != null)
    {
        lastY = cameraLock.lastY;
    }

    spawnTimer += Time.deltaTime;
    if(spawnTimer >= spawnInterval)
    {
        SpawnBounce();
        spawnTimer = 0f;
    }
}

3. 检查LockCameraY的lastY更新逻辑

确保lastY持续同步相机Y轴位置,示例正确逻辑如下:

public class LockCameraY : MonoBehaviour
{
    public float lastY;
    private float updateTimer = 0f;

    void Update()
    {
        // 按你说的每0.1秒更新一次
        updateTimer += Time.deltaTime;
        if(updateTimer >= 0.1f)
        {
            lastY = transform.position.y;
            updateTimer = 0f;
        }
    }
}

如果lastY在相机上升到Y=15后停止更新,平台生成自然会终止,必须保证这个值随相机高度持续增长。

4. 调试验证

  • 查看控制台Debug.Log输出,确认lastY是否随相机上升持续增加
  • 若lastY停滞,检查LockCameraY脚本是否正常运行
  • 若y快速超过lastY+5,调大spawnInterval降低生成速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:25:07