为什么FindObjectsOfType方法仅返回1个对象?

问题描述 投票:0回答:1

我正在尝试创建一个具有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++;
    }
}
c# unity3d game-development
1个回答
0
投票

FindObjectsOfType只能在场景层次中找到启用活动的组件。如果由于某种原因在您致电时不是这种情况,则找不到该组件。

它将不返回任何资产(网格,纹理,预制件...)或不活动的对象。

也请注意

请注意,此功能非常慢。 [...]。在大多数情况下,您可以改用单例模式。

因此,在您的情况下,我宁愿使用单例模式:

FindObjectsOfType
© www.soinside.com 2019 - 2024. All rights reserved.