【问题标题】:How do I access booleans from another scene? [duplicate]如何从另一个场景访问布尔值? [复制]
【发布时间】:2017-01-17 14:00:51
【问题描述】:

我有一个名为 dataSheet 的脚本附加到 GameObject DataSheet。如何从另一个场景访问其中的布尔值?

【问题讨论】:

  • 来自另一个场景或另一个游戏对象?您无法访问其他场景中的任何内容
  • @Programmer 我有一个带有主菜单的场景,并且有一些布尔值,例如“提示”,我需要从另一个场景访问它们以使其显示提示或不显示提示
  • 只是为了让您知道为什么您的问题被否决了。你应该说出你在做什么,你的问题和你期望发生的事情。您还应该提及您尝试过的内容。如果您提出一两行要求人们询问更多信息的问题,您可能会因问题被关闭而被否决...您未来问题的参考。

标签: unity3d unity5 unity3d-2dtools


【解决方案1】:

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

你必须通过调用DontDestroyOnLoad()来标记上一个场景中的对象

Source

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

【讨论】:

  • 又该如何正确操作呢?
  • 我不会将此称为错误方法。我就是这样做的。在没有 PlayerPrefs 的地方,它是可扩展和可管理的。
  • 为什么 PlayerPrefs 不可管理或不可扩展?
  • 您仅限于 SetInt、SetFloat、SetString,它们将遍布您的解决方案。一个持久的 DDOL 游戏管理器类将支持任何类型,并且可以在需要时包含不会使您的代码到处乱七八糟的逻辑。也许这只是个人喜好,但如果您需要从场景到场景的多个布尔值,我会使用某种静态游戏管理器。这是我相信的,如果我错了,我很乐意得到纠正!
  • 一个缺点是你必须在你需要的每个脚本中找到游戏对象和脚本组件(如果你需要 MonoBehaviour)。否则一个静态类就足够了。
【解决方案2】:

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

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

您还可以使用 MonoBehaviour 回调,例如 OnDestroy 或 SceneManager 事件系统。

https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager-sceneLoaded.html

【讨论】:

  • 我梦想 PlayerPrefs 不再被用于一切,什么都没有......它被称为 Player Preferences 是有原因的。它并非旨在存储有关游戏本身的数据。
  • 嗯,你不应该停止梦想,因为它们被广泛用于“错误”目的。无论您保存玩家数据还是游戏数据都无关紧要。它们只是数据。但是哇。
  • PlayerPrefs 存储在注册表中,因此可以很容易地被用户修改,并为计算机产生垃圾。我认为最好阻止初学者使用 Player Prefs 并指出他们的好方法。
  • @Hellium 对不起,我不同意你和 Fredrik 的 cmets。 “很容易被用户修改,给电脑制造垃圾”这个说法我以前见过,但它是一个糟糕的说法。只要保存在玩家的电脑上,他们就可以轻松修改。至于电脑的垃圾,那是假的,它没有。它不会写入重要的操作系统注册表路径。它写入应用程序注册表。它甚至在应用程序注册表下的 GameName 下写入。如果你不想要它,你可以去那里删除 GameName 注册表,它就会消失。
  • 我见过人们说同样的话,但他们完全不知道他们在说什么。它不会弄乱操作系统保存其重要状态的系统注册表。它保存到应用程序注册表下的 GameName 键,这完全没问题。更何况您可以使用PlayerPrefs.DeleteAll 清除它们。
猜你喜欢
  • 2013-04-24
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
相关资源
最近更新 更多