场景变化时如何运行一些代码?

不知道我能解释多少。我有一个不破坏加载脚本,所以它可以在两个场景之间移动。然而,在一个场景(它最初创建的那个)中,我需要它在每次重新进入这个场景时运行 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);

        }


    }



青春有我
浏览 142回答 1
1回答

婷婷同学_

Start您可以为SceneManager.sceneLoaded添加一个侦听器,而不是在其中执行此操作仅在加载初始场景时才执行这些操作,您可以使用它SceneManager.GetActiveScene()来存储并稍后将初始场景与加载的场景进行比较。// Store the scene that should trigger startprivate Scene scene;private void Awake(){&nbsp; &nbsp; // It is save to remove listeners even if they&nbsp; &nbsp; // didn't exist so far.&nbsp; &nbsp; // This makes sure it is added only once&nbsp; &nbsp; SceneManager.sceneLoaded -= OnsceneLoaded;&nbsp; &nbsp; // Add the listener to be called when a scene is loaded&nbsp; &nbsp; SceneManager.sceneLoaded += OnSceneLoaded;&nbsp; &nbsp; DontDestroyOnLoad(gameObject);&nbsp; &nbsp; // Store the creating scene as the scene to trigger start&nbsp; &nbsp; scene = SceneManager.GetActiveScene();}private void OnDestroy(){&nbsp; &nbsp; // Always clean up your listeners when not needed anymore&nbsp; &nbsp; SceneManager.sceneLoaded -= OnSceneLoaded;}// Listener for sceneLoadedprivate void OnSceneLoaded(Scene scene, LoadSceneMode mode){&nbsp; &nbsp; // return if not the start calling scene&nbsp; &nbsp; if(!string.Equals(scene.path, this.scene.path) return;&nbsp; &nbsp; Debug.Log("Re-Initializing", this);&nbsp; &nbsp; // do your "Start" stuff here}Afaik /我如何理解链接中的示例OnSceneLoaded也将在第一个场景中调用,只要您在之前添加回调Start(所以在Awakeor中OnEnable)。注意我使用Scene.path s 而不是scene.name因为path它总是唯一的(由于操作系统文件系统),而name可能不是。
打开App,查看更多内容
随时随地看视频慕课网APP