在Unity中,我希望一个对象具有一个下降速度变量,其他所有对象都可以访问该变量。由于各种原因,我无法将内置重力用于尝试执行的操作。
如何重复访问一个对象中的变量,以便在更新对象时从另一个对象获取更新的变量?
有几种方法可以实现此目的。
如果要让速度变量由附加到GameObject的组件控制 MyObject
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的对象,否则事情会变得混乱。
另外,您可以SpeedController在每个类中定义一个需要访问的成员,speed并通过在Unity编辑器中拖放来设置引用。然后,您可以保存查找,但是如果许多课程都需要的话,这当然很不方便。
SpeedController
speed
另一种方法是创建一个包含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在评论部分中所述:
public class SpeedController : MonoBehaviour public static float speed;
[更新] 感谢Jerdak。是的,Component.SendMessage应该绝对在列表中:
go.SendMessage("GetFallingSpeed");
同样,您需要参考go第一个解决方案中所述的类似内容。
go
有更多解决此问题的方法。如果您正在考虑在所有场景中都处于活动状态的游戏对象,则应该看看Unity单例管理器类