我正在尝试创建一个具有2个关卡的突破游戏。玩家在第1级得分的分数应保持在第2级。但是游戏将挂在第2级。在2级开始时,应该有2个级对象,但是在调试时我发现FindObjectsOfType<Level>()
方法返回1。
public class Level : MonoBehaviour
{
[SerializeField] TextMeshPro text ;
[Range(0,10)][SerializeField] float speed;
public int blocksAvailable, points;
// Start is called before the first frame update
void Start() {
blocksAvailable = countBlocks();
points = 0;
}
private void Awake() {
int levelObjectCount = FindObjectsOfType<Level>().Length;
if (levelObjectCount > 1) {
Destroy(gameObject);
}
else {
DontDestroyOnLoad(gameObject);
}
}
// Update is called once per frame
void Update() {
text.text = points.ToString();
if (blocksAvailable == points) {
SceneManager.LoadScene(2);
}
Time.timeScale = speed;
}
public int countBlocks() {
int blocks = GameObject.FindGameObjectsWithTag("Block").Length;
return blocks;
}
public void addPoints() {
points++;
}
}
FindObjectsOfType
只能在场景层次中找到启用和活动的组件。如果由于某种原因在您致电时不是这种情况,则找不到该组件。
它将不返回任何资产(网格,纹理,预制件...)或不活动的对象。
也请注意
请注意,此功能非常慢。 [...]。在大多数情况下,您可以改用单例模式。
因此,在您的情况下,我宁愿使用单例模式:
FindObjectsOfType