unity3d Unity教程第二次发布新问题

np8igboo  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(142)

这个脚本应该每2秒左右生成一个对象,但是,它似乎是无休止地瞬间生成了一百万个对象。我将进一步修复它们,使它们在屏幕外被销毁,这样就不会有问题了。但是我需要做的是让它适当地延迟执行

InvokeRepeating()

任何帮助将不胜感激。这里是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpawnManager : MonoBehaviour
{
    public GameObject obstaclePrefab;
    private Vector3 spawnPOS = new Vector3(25, 0, 0);
    private float startDelay = 2;
    private float repeatRate = 2;
    

    // Start is called before the first frame update
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {
        
        {
            InvokeRepeating("SpawnObstacle", startDelay, repeatRate);
        }

    }

    void SpawnObstacle()
    {
        Instantiate(obstaclePrefab, spawnPOS, obstaclePrefab.transform.rotation);
    }
}

我把repeatRate写进去并不重要,2和20看起来很相似。虽然只有2应该没问题......这是几天前我第一次把这个放在一起。

zpqajqem

zpqajqem1#

你正在从Update调用InvokeRepeating。这将在每一帧启动一个新的计时器。你甚至在那里有一个注解说:

// Update is called once per frame

是真的!
假设你的更新每秒发生60次左右。所以我预计在最初的2秒延迟之后,会创建120个左右的对象**。这既不是***即时生成***也不是***“百万”***。(我对准确地报告事情的细节有点挑剔。)但是计时器将保持活动状态并继续产生新的示例,并且总数 * 将 * 以 * 二次方 * 增长 *(对象的数量将与经过时间的平方成比例),所以我确信 * 看起来 * 像 * 一百万 *。
很可能您希望InvokeRepeating调用位于Start方法中,而不是位于Update方法中。这样,您只启动了一个重复计时器。

相关问题