【发布时间】:2015-07-28 17:41:36
【问题描述】:
所以我正在制作一个简单的 2d 游戏,玩家在 x 轴上移动并捡起掉落的物体。我有一个脚本可以在播放器上方生成对象,这里是:
using UnityEngine;
using System.Collections;
public class Spawner : MonoBehaviour
{
private GameObject[] locationsToSpawn;
private float counter = 0;
[SerializeField]
string[] listOfPossibleTags;
[SerializeField]
GameObject[] objectToSpawn;
[SerializeField]
float timeBetweenSpawns = 3.0f;
void Start()
{
locationsToSpawn = GameObject.FindGameObjectsWithTag("SpawnLocation");
}
void Update()
{
counter += Time.deltaTime;
if (counter > timeBetweenSpawns)
{
GameObject spawnedObject;
spawnedObject = Instantiate(objectToSpawn[Random.Range(0,objectToSpawn.Length)], locationsToSpawn[Random.Range(0, locationsToSpawn.Length)].transform.position, Quaternion.identity) as GameObject;
spawnedObject.gameObject.tag = listOfPossibleTags[Random.Range(0, listOfPossibleTags.Length)];
counter = 0;
}
}
}
但是,在拾取了几个对象后,游戏变得如此缓慢,最终导致 Unity 崩溃!我有 Intel i7、8GB RAM、Nvidia 550m,所以我的笔记本电脑可能不是问题。还值得一提的是,我的点数计数器对我的生成对象发疯了,但我完美地计算了我手动放置的对象(换句话说,生成的对象使我的点数计数器计数太多点)。关于为什么我的游戏导致低 FPS 的任何想法?谢谢!
【问题讨论】:
-
你能在这里添加你的“拾取”脚本吗?
-
顺便说一句,您应该设置
counter -= timeBetweenSpawns,而不是将counter设置为零。这消除了余数错误,并且您希望养成以这种方式编写它的习惯。当您处理更快的事件时,它变得更加重要,例如每隔几帧发生一次的事件。
标签: performance unity3d frame-rate