Unity3d 如何从另一个场景访问布尔值?

Unity3d 如何从另一个场景访问布尔值?,unity3d,unity5,unity3d-2dtools,Unity3d,Unity5,Unity3d 2dtools,我有一个名为dataSheet的脚本附在GameObject数据表上。如何从另一个场景访问其中的布尔值?加载新场景时,Unity会在创建新场景的对象之前销毁旧场景中的所有对象 必须通过调用DontDestroyOnLoad() 但是这不是正确的方法如何使用Unity您有一个类要保存布尔值: private bool myBool = false; void LoadingNewScene() { int i = (mybool == true) ? 1 : 0; Play

我有一个名为dataSheet的脚本附在GameObject数据表上。如何从另一个场景访问其中的布尔值?

加载新场景时,Unity会在创建新场景的对象之前销毁旧场景中的所有对象

必须通过调用
DontDestroyOnLoad()


但是这不是正确的方法如何使用Unity

您有一个类要保存布尔值:

private bool myBool = false;

void LoadingNewScene()
{
     int i = (mybool == true) ? 1 : 0;
     PlayerPrefs.SetInt("TheValue", i);
}
以上假设加载新场景时调用LoadingNewScene。t当您有一个类附加到另一个场景中的游戏对象时:

void Awake(){
     if(PlayerPrefs.HasKey("TheValue") == true){
         bool result = PlayerPrefs.GetInt("TheValue") > 0;
     }
}
您还可以使用MonoBehavior回调,如OnDestroy或SceneManager事件系统


来自另一个场景还是另一个游戏对象?您无法从其他用户访问任何内容scene@Programmer我有一个带有主菜单的场景,有一些布尔值,例如“提示”,我需要从另一个场景访问它们,使其显示提示,而不仅仅是让你知道为什么你的问题被否决。你应该说你正在做什么,你的问题和你期望发生什么。你还应该提到你尝试过的东西。如果你问一个或两行的问题,要求人们询问更多的信息,你很可能会在问题结束时被否决……这是你未来问题的参考。如何正确处理?我不会认为这是错误的方法。我就是这样做的。在PlayerPref不可用的地方,它是可伸缩和可管理的。为什么PlayerPref不可管理或不可伸缩?您仅限于SetInt、SetFloat和SetString,它们将遍布您的解决方案。持久性DDOL game manager类将支持任何类型,如果需要,它可以包含不会使代码到处混乱的逻辑。也许这只是个人喜好,但如果你需要在一个场景到另一个场景之间进行更多的BOOL,我会使用某种静态游戏管理器。这就是我所相信的,如果我错了,我会很高兴被纠正!缺点是你必须在你需要的每个脚本中找到游戏对象和脚本组件(如果你需要MonoBehavior)。否则一个静态类就足够了。我梦想PlayerRefs不再被用于任何事情,而什么都不用。。。。它被称为玩家偏好是有原因的。它不是用来存储关于游戏本身的数据的。你不应该停止梦想,因为它们被广泛用于“错误”的目的。你是保存玩家数据还是游戏数据并不重要。它们只是数据。但是wava.playerpref存储在注册表中,因此用户可以很容易地修改它,并为计算机产生垃圾。我认为最好不要让初学者使用玩家Pref,并告诉他们好的方法。@Hellium抱歉,我不同意你和Fredrik的评论。“可以很容易地被用户修改,并为计算机制造垃圾”我以前见过这个论点,但它是一个糟糕的论点。只要它保存在玩家的电脑上,他们就可以轻松地修改它。至于电脑的垃圾,那是假的,不是。它不会写入重要的OS注册表路径。它写入应用程序注册表。它甚至在应用程序注册表下的游戏名下写入。如果你不想要它,你可以去那里删除GameName注册表,它就会消失。我见过有人说同样的话,但他们完全不知道自己在说什么。它不会弄乱OS保存其重要状态的系统注册表。它保存到应用程序注册表下的GameName键中,这是完全正确的。更不用说您可以使用
PlayerPrefs.DeleteAll
清除它们。