如何从其他场景访问对象的组件?

时间:2018-09-19 13:07:07

标签: unity3d

我有一个Player游戏对象,上面有一个脚本,其中包含一些变量。我创建了一个充当主菜单的场景,其中包含“商店”部分,其中进行了升级,基本上,我需要从其他场景访问Player gameObject的脚本,以便可以从主菜单场景修改变量。我怎样才能做到这一点 ?

3 个答案:

答案 0 :(得分:1)

检查一下:

https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

一旦加载了播放器,这将使他保持在每个场景中,直到您选择释放hiim,这意味着在加载菜单场景时,他将可以访问。

现在,由于我们知道他在那里,我们可以: (请注意,播放器是您的脚本,变量不是您的实际播放器)

ScriptName player = GameObject.FindObjectWithTag("yourtag").GetComponent<ScriptName>();

答案 1 :(得分:0)

静态类怎么样?

您可以将值保留在那里,并从任意位置访问它:D

答案 2 :(得分:0)

默认情况下,组件是类的实例。如果当前加载的场景中没有带有该组件的GameObject,则没有任何可访问的内容。 如果我记得,您现在一次可以加载多个场景。

如果当前加载了该脚本的GameObject,则可以使用: https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html

甚至更好

如果您一次只有1个玩家,请使用单例设计模式。

我猜您想保存这些升级以用于下一次游戏,因此您可以使用PlayerPrefs https://docs.unity3d.com/ScriptReference/PlayerPrefs.html

如果您想保存50个以上的数据值,我建议您使用基于文件的数据库(如SQLite),它花费的时间很少,并且运行非常快。而且比使用PlayerPrefs更具可读性。