这个脚本应该每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应该没问题......这是几天前我第一次把这个放在一起。
1条答案
按热度按时间zpqajqem1#
你正在从
Update
调用InvokeRepeating
。这将在每一帧启动一个新的计时器。你甚至在那里有一个注解说:是真的!
假设你的更新每秒发生60次左右。所以我预计在最初的2秒延迟之后,会创建120个左右的对象**。这既不是***即时生成***也不是***“百万”***。(我对准确地报告事情的细节有点挑剔。)但是计时器将保持活动状态并继续产生新的示例,并且总数 * 将 * 以 * 二次方 * 增长 *(对象的数量将与经过时间的平方成比例),所以我确信 * 看起来 * 像 * 一百万 *。
很可能您希望
InvokeRepeating
调用位于Start
方法中,而不是位于Update
方法中。这样,您只启动了一个重复计时器。