据我所知,使用全局变量的唯一可能性是将它们定义为static(C#中的const)。 有没有办法从另一个脚本访问和更改变量,而两个脚本都访问同一个变量?
答案 0 :(得分:3)
这取决于具体情况和要求。在大多数情况下,有几种方法可以去。
如果两个脚本都派生自MonoBehaviour
并且处于活动状态,您可以使用非静态公共成员并使用GameObject.Find(如果您经常需要它,请将其存储为参考,或者在Unity中使用拖放操作编辑器)。
仅当您依赖于对象时,这两个对象在同一场景中处于活动状态或通过调用DontDestroyOnLoad延长其生命周期才能正常工作。
如果您有普通对象,public static
应该是最方便的方法,但可以与单例模式结合使用。请注意,public const
仅适用于基本类型。如果要授予对结构或对象的只读访问权限,可以使用public static readonly
。
请查看In Unity, how can I pass values from one script to another?以获取编码示例,并Unity3D singleton manager classes查看有关MonoBehaviour
个实例的单例的深入思考。
答案 1 :(得分:0)
如果值是受支持的类型,不经常访问,并且会受益于应用程序运行之间的持久性,PlayerPrefs有时是保留一些全局变量的好地方:)