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

Unity中如何编写删除玩家后方障碍物的脚本以解决卡顿?

解决跑酷游戏障碍物卡顿与后方销毁问题

一、先修正你的生成逻辑(可选但关键)

你的原RandomSpawn脚本只在Start()里生成一个障碍物,不符合跑酷游戏持续生成的需求,先改成定时生成的版本:

using UnityEngine;

public class RandomSpawn : MonoBehaviour
{
    public Transform player;
    public GameObject[] myObjects;
    // 生成间隔(可在Inspector面板调整)
    public float spawnInterval = 2f;
    // 生成点距离玩家的最小/最大Z轴距离
    public float minSpawnZ = 45f;
    public float maxSpawnZ = 100f;

    void Start()
    {
        // 1秒后开始定时生成,每spawnInterval秒生成一次
        InvokeRepeating(nameof(SpawnObstacle), 1f, spawnInterval);
    }

    void SpawnObstacle()
    {
        int randomIndex = Random.Range(0, myObjects.Length);
        float spawnZ = player.position.z + Random.Range(minSpawnZ, maxSpawnZ);
        Vector3 spawnPos = new Vector3(Random.Range(-7, 7), 1, spawnZ);

        Instantiate(myObjects[randomIndex], spawnPos, Quaternion.identity);
    }
}

二、可行的后方障碍物销毁脚本

给所有障碍物预制体添加这个脚本,它会自动检测自身是否处于玩家后方足够远的位置,满足条件就销毁自己:

using UnityEngine;

public class ObstacleAutoDestroy : MonoBehaviour
{
    public Transform player;
    // 距离玩家后方多少Z轴距离时触发销毁(可调整)
    public float destroyOffset = 30f;

    void Update()
    {
        // 当物体Z轴位置小于玩家Z轴减去偏移量时,判定为在玩家后方过远
        if (transform.position.z < player.position.z - destroyOffset)
        {
            Destroy(gameObject);
        }
    }
}

使用方法:把这个脚本拖到所有障碍物预制体上,在Inspector面板中拖入玩家对象,设置合适的destroyOffset数值即可。

三、你的原销毁脚本问题说明

你写的RandomDelete脚本存在核心错误:

  • 错误重载了Unity的Destroy方法,该方法需要传入物体对象,你传的三个数值完全不符合用法
  • 没有获取到要销毁的障碍物实例,仅传递位置参数无法定位到具体物体

四、额外性能优化建议

  • 若障碍物生成频率高,可使用对象池复用障碍物,避免频繁创建/销毁物体带来的性能损耗
  • 不要把生成Z轴上限设为99000这类超大值,会生成大量无效的远距障碍物,浪费资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:17:39