bugfix> c# > 投稿

Unityアセットストアの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);
    }
}

回答 1 件
  • なぜ使うの? AddListenerUpdate ->フレームごとにコールバックを追加しますか?!あなたがそのボタンをクリックすると、あなたは電話をかけようとしています StartGame そのシーンで過ごした時間に応じて何百回もメソッドを実行します..そしておそらく、シーンがすでに変更されている瞬間に2回目にそのメソッドを呼び出そうとします->このボタンとこのクラスはすでに破棄されています->null ref例外。


    全体を削除します Update 方法!

    すでにコールバックを追加しました Start


    さらに注意してください ok 既にですa Button だから ok.GetComponent<Button>() 完全に冗長です。単にする

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

あなたの答え