Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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_Singleton - Fatal编程技术网

C# DontDestroyOnLoad故障

C# DontDestroyOnLoad故障,c#,unity3d,singleton,C#,Unity3d,Singleton,我有主场景(街道)和许多子场景(房子),我可以从主场景中看到。当我来到一个家,然后回到街上,我需要玩家的对象放置在房子附近,他在那里。所以我需要使用DontDestroyOnLoad来记住他的位置 但是当我回到家里,我需要从主场景中禁用播放器对象,而这里我的代码不起作用。同样,在模拟中首次使用此脚本后,我不能上/下移动光标,只能左/右移动(这是第一人称射击) 在每个Unity项目中都必须有一个“预加载场景”。这只是“他们没有提到的事情之一”。在那里有你的DDOL对象。ECS游戏引擎中没有单例,

我有主场景(街道)和许多子场景(房子),我可以从主场景中看到。当我来到一个家,然后回到街上,我需要玩家的对象放置在房子附近,他在那里。所以我需要使用
DontDestroyOnLoad
来记住他的位置

但是当我回到家里,我需要从主场景中禁用播放器对象,而这里我的代码不起作用。同样,在模拟中首次使用此脚本后,我不能上/下移动光标,只能左/右移动(这是第一人称射击)


在每个Unity项目中都必须有一个“预加载场景”。这只是“他们没有提到的事情之一”。在那里有你的DDOL对象。ECS游戏引擎中没有单例,这是一个毫无意义的概念。(每个游戏对象…都是一个单例。如果你“需要一个单例”…那就是一个游戏对象。)注意,要记住一个对象的位置,只需要一个简单的静态类(不是单一行为,只是一个普通的静态-基本上是“全局”)就可以复制ok first。你不需要摧毁昂洛德来记住他的位置。只需保存玩家变换的XYZ位置。其次,不禁用播放器,而是禁用作为播放器控制器的脚本。如果没有在函数调用外存储指向引用,则将Active设置为false将不会使播放机恢复活动状态。就像你的DisablePlayerManScene一样,它试图再次找到“活动”为False的对象,但它找不到。你必须在每个Unity项目中都有一个“预加载场景”。这只是“他们没有提到的事情之一”。在那里有你的DDOL对象。ECS游戏引擎中没有单例,这是一个毫无意义的概念。(每个游戏对象…都是一个单例。如果你“需要一个单例”…那就是一个游戏对象。)注意,要记住一个对象的位置,只需要一个简单的静态类(不是单一行为,只是一个普通的静态-基本上是“全局”)就可以复制ok first。你不需要摧毁昂洛德来记住他的位置。只需保存玩家变换的XYZ位置。其次,不禁用播放器,而是禁用作为播放器控制器的脚本。如果没有在函数调用外存储指向引用,则将Active设置为false将不会使播放机恢复活动状态。与DisablePlayerManScene一样,它试图再次找到“活动”为False的对象,但找不到它。
public PS plr;

private GameObject playerOnMainScene;

public void Awake()
{
    PlayerSingleton();
    DisablePlayerOfMainScene();
}

void PlayerSingleton()
{
    if (!plr)
    {
        DontDestroyOnLoad(gameObject);
        plr = this;
    }
    else
        Destroy(gameObject);
}

void DisablePlayerOfMainScene()
{
    playerOnMainScene = GameObject.FindGameObjectWithTag("PlayerOnMainScene");

    if (SceneManager.GetActiveScene().name != "MainScene")
    {
        Debug.Log("1"); // this code doesn't work when scene name != "MainScene"
        playerOnMainScene.SetActive(false);
    }
    else
        playerOnMainScene.SetActive(true);
}