Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用DontDestroyOnLoad在场景加载时调用方法_C#_Unity3d - Fatal编程技术网

C# 使用DontDestroyOnLoad在场景加载时调用方法

C# 使用DontDestroyOnLoad在场景加载时调用方法,c#,unity3d,C#,Unity3d,我正在使用一个带有DontDestroyOnLoad()的游戏对象来存储玩家数据和场景之间的转换。有没有办法让它在场景更改时调用Start()或等效方法(在新场景中填充播放器数据),或者我需要在每个场景中放置一个实用程序对象,在其自己的Start()中调用相应的设置方法。您可以使用例如并附加一个回调,如 void Awake() { DontDestroyOnLoad (gameObject); SceneManager.sceneLoaded += OnSceneLoaded

我正在使用一个带有DontDestroyOnLoad()的游戏对象来存储玩家数据和场景之间的转换。有没有办法让它在场景更改时调用Start()或等效方法(在新场景中填充播放器数据),或者我需要在每个场景中放置一个实用程序对象,在其自己的Start()中调用相应的设置方法。

您可以使用例如并附加一个回调,如

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;
}