在Unity中,如何将值从一个脚本传递到另一个脚本?

Unity中,我希望一个对象具有一个下降速度变量,其他所有对象都可以访问该变量。由于各种原因,我无法将内置重力用于尝试执行的操作。

回答:

有几种方法可以实现此目的。

如果要让速度变量由附加到GameObject的组件控制 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编辑器中拖放来设置引用。然后,您可以保存查找,但是如果许多课程都需要的话,这当然很不方便。


另一种方法是创建一个包含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第一个解决方案中所述的类似内容。

有更多解决此问题的方法。如果您正在考虑在所有场景中都处于活动状态的游戏对象,则应该看看Unity单例管理器类

以上是 在Unity中,如何将值从一个脚本传递到另一个脚本? 的全部内容, 来源链接: utcz.com/qa/435694.html

回到顶部