更改场景时的Unity重新运行启动功能

时间:2019-01-06 21:25:52

标签: c# unity3d

不确定我能解释得如何。我有一个不破坏加载脚本,因此可以在两个场景之间移动。但是,在一个场景(最初创建的一个场景)中,每次绘制场景时,我都需要它来运行start函数,因为它会绘制一些UI。这是供参考的代码:

我可以尝试将其放入新脚本中,但是我担心,由于我每周仅在几个小时内从事此项目,因此会有一些代码会忘记适应此更改,并且它不会更长的工作。如何重新调用启动功能或执行类似操作?

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 个答案:

答案 0 :(得分:3)

除了可以在CefSharp中进行操作之外,您还可以为SceneManager.sceneLoaded添加一个侦听器

仅在加载初始场景时才执行此操作,可以使用SceneManager.GetActiveScene()存储并稍后将初始场景与加载的场景进行比较。

Start

Afaik /我将如何理解链接// 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() { // Allways 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 } 中的示例,只要您在OnSceneLoaded之前添加回调(在Start或{{ 1}})。


请注意,我使用Scene.path而不是Awake是因为OnEnable始终唯一的(由于OS文件系统),而{{1} }可能不是。