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