亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

場景變化時如何運行一些代碼?

場景變化時如何運行一些代碼?

C#
青春有我 2022-07-10 10:43:00
不知道我能解釋多少。我有一個不破壞加載腳本,所以它可以在兩個場景之間移動。然而,在一個場景(它最初創建的那個)中,我需要它在每次重新進入這個場景時運行 start 函數,因為它會繪制出我的一些 UI。這是供參考的代碼:我可以嘗試將它放入一個新腳本中,但我擔心由于我每周只在這個項目上工作幾個小時,所以會有一些我忘記適應這種變化的代碼,它將不再工作。我怎樣才能重新調用 start 函數,或者做類似的事情?int spriteIndex = 0;    foreach (Sprite texture in spriteImages) {        GameObject button = Instantiate (shopButtonPrefab) as GameObject;        Image buttonImage = button.GetComponent<Image> ();        Image[] images = button.GetComponentsInChildren<Image>();        int newIndex = spriteIndex;        button.GetComponent<Button> ().onClick.AddListener (() => ChangePlayerSkin (newIndex));        spriteIndex++;        foreach (Image image in images) {            if (image != buttonImage) {                //button.GetComponentInChildren<Image>().sprite = texture;                //button.transform.SetParent (shopButtonContrainer.transform, false);                image.sprite = texture;                break;            }            button.transform.SetParent (shopButtonContrainer.transform, false);        }    }
查看完整描述

1 回答

?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

Start您可以為SceneManager.sceneLoaded添加一個偵聽器,而不是在其中執行此操作


僅在加載初始場景時才執行這些操作,您可以使用它SceneManager.GetActiveScene()來存儲并稍后將初始場景與加載的場景進行比較。


// Store the scene that should trigger start

private Scene scene;


private void Awake()

{

    // It is save to remove listeners even if they

    // didn't exist so far.

    // This makes sure it is added only once

    SceneManager.sceneLoaded -= OnsceneLoaded;


    // Add the listener to be called when a scene is loaded

    SceneManager.sceneLoaded += OnSceneLoaded;


    DontDestroyOnLoad(gameObject);


    // Store the creating scene as the scene to trigger start

    scene = SceneManager.GetActiveScene();

}


private void OnDestroy()

{

    // Always clean up your listeners when not needed anymore

    SceneManager.sceneLoaded -= OnSceneLoaded;

}


// Listener for sceneLoaded

private void OnSceneLoaded(Scene scene, LoadSceneMode mode)

{

    // return if not the start calling scene

    if(!string.Equals(scene.path, this.scene.path) return;


    Debug.Log("Re-Initializing", this);

    // do your "Start" stuff here

}

Afaik /我如何理解鏈接中的示例OnSceneLoaded也將在第一個場景中調用,只要您在之前添加回調Start(所以在Awakeor中OnEnable)。


注意我使用Scene.path s 而不是scene.name因為path它總是唯一的(由于操作系統文件系統),而name可能不是。


查看完整回答
反對 回復 2022-07-10
  • 1 回答
  • 0 關注
  • 121 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號