从另一个脚本C#访问变量[重复]

Posted

技术标签:

【中文标题】从另一个脚本C#访问变量[重复]【英文标题】:Accessing a variable from another script C# [duplicate] 【发布时间】:2014-09-19 09:40:59 【问题描述】:

你能告诉我如何从另一个脚本访问一个脚本的变量吗?我什至已经阅读了统一网站上的所有内容,但我仍然做不到。我知道如何访问另一个对象但不知道另一个变量。

情况是这样的: 我在脚本 B 中,我想从脚本 A 访问变量 X。变量Xboolean。 你能帮帮我吗?

顺便说一句,我需要在脚本 B 中更新 X 的值,我该怎么做?在Update 函数中访问它 如果你能给我提供这些字母的例子,那就太好了!

谢谢

【问题讨论】:

您能添加一些您的两个脚本的示例代码吗?将有助于为您提供解决方案。 【参考方案1】:

您首先需要获取变量的脚本组件,如果它们位于不同的游戏对象中,您需要将游戏对象作为引用传递给检查器。

例如,我在GameObject A 中有scriptA.cs,在GameObject B 中有scriptB.cs

scriptA.cs

// make sure its type is public so you can access it later on
public bool X = false;

scriptB.cs

public GameObject a; // you will need this if scriptB is in another GameObject
                     // if not, you can omit this
                     // you'll realize in the inspector a field GameObject will appear
                     // assign it just by dragging the game object there
public scriptA script; // this will be the container of the script

void Start()
    // first you need to get the script component from game object A
    // getComponent can get any components, rigidbody, collider, etc from a game object
    // giving it <scriptA> meaning you want to get a component with type scriptA
    // note that if your script is not from another game object, you don't need "a."
    // script = a.gameObject.getComponent<scriptA>(); <-- this is a bit wrong, thanks to user2320445 for spotting that
    // don't need .gameObject because a itself is already a gameObject
    script = a.getComponent<scriptA>();


void Update()
    // and you can access the variable like this
    // even modifying it works
    script.X = true;

【讨论】:

访问X 的方式应该是script.X = true; 而不是scriptA.X = true;?如果不是static,您将无法通过这种方式访问​​X @GrayCygnus 哎呀你发现了我的错误。谢谢,我已经修好了。 如果你引用了 GameObject a,你也可以直接引用想要的组件,而无需调用 GetComponent【参考方案2】:

只是为了完成第一个答案

不需要

a.gameObject.getComponent<scriptA>();

a 已经是GameObject 所以这样就可以了

a.getComponent<scriptA>();

如果您尝试访问的变量位于 GameObject 的子项中,您应该使用

a.GetComponentInChildren<scriptA>();

如果你需要它的变量或方法,你可以像这样访问它

a.GetComponentInChildren<scriptA>().nameofyourvar;
a.GetComponentInChildren<scriptA>().nameofyourmethod(Methodparams);

【讨论】:

【参考方案3】:

你可以在这里使用静态。

这是一个例子:

ScriptA.cs

Class ScriptA : MonoBehaviour
 public static bool X = false;

ScriptB.cs

Class ScriptB : MonoBehaviour
 void Update() 
   bool AccesingX = ScriptA.X;
   // or you can do this also 
   ScriptA.X = true;
 

ScriptA.cs

Class ScriptA : MonoBehaviour

//you are actually creating instance of this class to access variable.
 public static ScriptA instance;

 void Awake()

     // give reference to created object.
     instance = this;

 

 // by this way you can access non-static members also.
 public bool X = false;



ScriptB.cs

Class ScriptB : MonoBehaviour
 void Update() 
   bool AccesingX = ScriptA.instance.X;
   // or you can do this also 
   ScriptA.instance.X = true;
 

更多细节可以参考单例类。

【讨论】:

以上是关于从另一个脚本C#访问变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C# - 在一些计算后从另一个构造函数调用构造函数[重复]

从另一个 C# 应用程序调用 C# 应用程序中的方法 [重复]

如何从另一个线程更新 GUI 上的文本框 [重复]

如何从另一个进程捕获退出代码[重复]

从另一个shell脚本调用函数[重复]

通过基类变量访问的 C# 受保护成员 [重复]