C# 使用DontDestroyOnLoad在场景加载时调用方法
我正在使用一个带有DontDestroyOnLoad()的游戏对象来存储玩家数据和场景之间的转换。有没有办法让它在场景更改时调用Start()或等效方法(在新场景中填充播放器数据),或者我需要在每个场景中放置一个实用程序对象,在其自己的Start()中调用相应的设置方法。您可以使用例如并附加一个回调,如C# 使用DontDestroyOnLoad在场景加载时调用方法,c#,unity3d,C#,Unity3d,我正在使用一个带有DontDestroyOnLoad()的游戏对象来存储玩家数据和场景之间的转换。有没有办法让它在场景更改时调用Start()或等效方法(在新场景中填充播放器数据),或者我需要在每个场景中放置一个实用程序对象,在其自己的Start()中调用相应的设置方法。您可以使用例如并附加一个回调,如 void Awake() { DontDestroyOnLoad (gameObject); SceneManager.sceneLoaded += OnSceneLoaded
void Awake()
{
DontDestroyOnLoad (gameObject);
SceneManager.sceneLoaded += OnSceneLoaded;
}
// called second
void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
// Find your player and populate the data like e.g.
var player = FindObjectOfType<Player>();
player.SetData(....);
}
private void OnDestroy ()
{
SceneManager.sceneLoaded -= OnSceneLoaded;
}
并让您的玩家像这样访问它们
if(PlayersData.someValue <= 0)
{
PlayerData.someValue = 10;
}
if(PlayersData.someValue)您可以这样做,也可以尝试检测场景是什么时候。我假设当您说它自己的Start()方法时,您的意思是在Start()上搜索场景中其他相同类型的对象,然后调用Init()或者DontDestroyOnLoad现有对象中的某个内容,强制它在新场景中设置数据,然后销毁自身?
public static class PlayerData
{
public static int someValue = 5;
}
if(PlayersData.someValue <= 0)
{
PlayerData.someValue = 10;
}