不确定我能解释得如何。我有一个不破坏加载脚本,因此可以在两个场景之间移动。但是,在一个场景(最初创建的一个场景)中,每次绘制场景时,我都需要它来运行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);
}
}
答案 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} }可能不是。