有几种方法可以实现这一点。
如果您希望速度变量由附加到游戏对象 MyObject 的组件控制
public class SpeedController : MonoBehaviour
public float speed;
// maybe you want restrict this to have read access, then you should use a property instead
在其他课程中你可以这样做:
GameObject go = GameObject.Find ("MyObject");
SpeedController speedController = go.GetComponent <SpeedController> ();
float courrentSpeed = speedController.speed;
注意只有一个名为 MyObject 的对象,否则事情就会一团糟。
或者,您可以在需要访问 speed 的每个类中定义一个 SpeedController 成员,并通过在 Unity 编辑器中拖放来设置引用。然后保存查找,但如果在许多类中需要,这当然很不方便。
另一种方法是创建一个包含speed 变量的单例,并具有:
public class MyGlobalSpeedController {
private static MyGlobalSpeedController instance = null;
public static MyGlobalSpeedController SharedInstance {
get {
if (instance == null) {
instance = new MyGlobalSpeedController ();
}
return instance;
}
}
public float speed;
}
所以所有类都可以访问这个:
float currentSpeed = MyGlobalSpeedController.SharedInstance.speed
正如 Jan Dvorak 在 cmets 部分所述:
public class SpeedController : MonoBehaviour
public static float speed;
[更新]
感谢杰达克。是的Component.SendMessage 绝对应该在名单上:
go.SendMessage("GetFallingSpeed");
同样,您需要引用go,如第一个解决方案中所述。
这个问题还有更多的解决方案。如果您正在考虑在所有场景中都处于活动状态的游戏对象,您应该看看Unity singleton manager classes