加载小场景时 Unity 编辑器/独立构建崩溃

Unity editor / standalone build crash when loading a small scene

我使用 unity assetstore 中的 UFPS 资产设置了一个小场景。当我直接加载场景时,它的加载时间不到 1 秒,但是当我从我的菜单加载它时,编辑器崩溃了。我也有一个异步方法的“加载器”场景,其中一个也在工作,所以我认为按钮出了问题(我也尝试从菜单加载异步场景,并且每次都尝试从菜单崩溃加载游戏场景)与构建版本相同,我找不到任何解决方案。这是按钮的脚本 (c#) :

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

using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class ButtonEvents : MonoBehaviour
{
    [SerializeField]
    public int selected;
    public Button ok;

    void Start()
    {
        Button okbtn = ok.GetComponent<Button>();
        okbtn.onClick.AddListener(StartGame);

        
    }
    public void Quit()
    {
        Application.Quit();
    }
    

    public void markabreakdown()
    {
        selected = 1; 
    }



    void Update()
    {
        Button okbtn = ok.GetComponent<Button>();
        okbtn.onClick.AddListener(StartGame);
        Debug.Log(selected);


    }
    public void StartGame()
    {
        SceneManager.LoadScene(selected);
    }
}

为什么在 Update 中使用 AddListener -> 每一帧都添加一个回调?!当您单击该按钮时,您将尝试调用 StartGame 方法数百次,具体取决于您在该场景中花费的时间......然后很可能它会在某个时刻第二次尝试调用该方法场景已更改 -> 此按钮和此 class 已被销毁 -> 空引用异常。


删除整个 Update 方法!

您已经在 Start

中添加了回调

进一步注意 ok 已经 一个 Button 所以调用 ok.GetComponent<Button>() 是完全多余的。简单地做

void Start()
{
    ok.onClick.AddListener(StartGame); 
}