从另一个脚本C#访问变量

从另一个脚本C#访问变量

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

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

顺便说一句,我需要X在脚本B中大幅更新其值,我该怎么做?在Update功能中访问它如果你可以给我和这些字母的例子将是伟大的!

谢谢


慕沐林林
浏览 1225回答 3
3回答

一只甜甜圈

首先需要获取变量的脚本组件,如果它们位于不同的游戏对象中,则需要将游戏对象作为参考传递给检查器。例如,我scriptA.cs在GameObject A和scriptB.cs在GameObject B:scriptA.cs//&nbsp;make&nbsp;sure&nbsp;its&nbsp;type&nbsp;is&nbsp;public&nbsp;so&nbsp;you&nbsp;can&nbsp;access&nbsp;it&nbsp;later&nbsp;onpublic&nbsp;bool&nbsp;X&nbsp;=&nbsp;false;scriptB.cspublic&nbsp;GameObject&nbsp;a;&nbsp;//&nbsp;you&nbsp;will&nbsp;need&nbsp;this&nbsp;if&nbsp;scriptB&nbsp;is&nbsp;in&nbsp;another&nbsp;GameObject &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;not,&nbsp;you&nbsp;can&nbsp;omit&nbsp;this &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;you'll&nbsp;realize&nbsp;in&nbsp;the&nbsp;inspector&nbsp;a&nbsp;field&nbsp;GameObject&nbsp;will&nbsp;appear &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;assign&nbsp;it&nbsp;just&nbsp;by&nbsp;dragging&nbsp;the&nbsp;game&nbsp;object&nbsp;therepublic&nbsp;scriptA&nbsp;script;&nbsp;//&nbsp;this&nbsp;will&nbsp;be&nbsp;the&nbsp;container&nbsp;of&nbsp;the&nbsp;scriptvoid&nbsp;Start(){ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;first&nbsp;you&nbsp;need&nbsp;to&nbsp;get&nbsp;the&nbsp;script&nbsp;component&nbsp;from&nbsp;game&nbsp;object&nbsp;A &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;getComponent&nbsp;can&nbsp;get&nbsp;any&nbsp;components,&nbsp;rigidbody,&nbsp;collider,&nbsp;etc&nbsp;from&nbsp;a&nbsp;game&nbsp;object &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;giving&nbsp;it&nbsp;<scriptA>&nbsp;meaning&nbsp;you&nbsp;want&nbsp;to&nbsp;get&nbsp;a&nbsp;component&nbsp;with&nbsp;type&nbsp;scriptA &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;note&nbsp;that&nbsp;if&nbsp;your&nbsp;script&nbsp;is&nbsp;not&nbsp;from&nbsp;another&nbsp;game&nbsp;object,&nbsp;you&nbsp;don't&nbsp;need&nbsp;"a." &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;script&nbsp;=&nbsp;a.gameObject.getComponent<scriptA>();&nbsp;<--&nbsp;this&nbsp;is&nbsp;a&nbsp;bit&nbsp;wrong,&nbsp;thanks&nbsp;to&nbsp;user2320445&nbsp;for&nbsp;spotting&nbsp;that &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;don't&nbsp;need&nbsp;.gameObject&nbsp;because&nbsp;a&nbsp;itself&nbsp;is&nbsp;already&nbsp;a&nbsp;gameObject &nbsp;&nbsp;&nbsp;&nbsp;script&nbsp;=&nbsp;a.getComponent<scriptA>();}void&nbsp;Update(){ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;and&nbsp;you&nbsp;can&nbsp;access&nbsp;the&nbsp;variable&nbsp;like&nbsp;this &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;even&nbsp;modifying&nbsp;it&nbsp;works &nbsp;&nbsp;&nbsp;&nbsp;script.X&nbsp;=&nbsp;true;}

红颜莎娜

只是为了完成第一个答案没有必要a.gameObject.getComponent<scriptA>();a已经是一个GameObject所以这样做了a.getComponent<scriptA>();如果您尝试访问的变量是GameObject您应该使用的子项a.GetComponentInChildren<scriptA>();如果您需要它的变量或方法,您可以像这样访问它a.GetComponentInChildren<scriptA>().nameofyourvar;a.GetComponentInChildren<scriptA>().nameofyourmethod(Methodparams);

手掌心

你可以在这里使用static。这是一个例子:ScriptA.csClass&nbsp;ScriptA&nbsp;:&nbsp;MonoBehaviour{ &nbsp;public&nbsp;static&nbsp;bool&nbsp;X&nbsp;=&nbsp;false;}ScriptB.csClass&nbsp;ScriptB&nbsp;:&nbsp;MonoBehaviour{ &nbsp;void&nbsp;Update()&nbsp;{ &nbsp;&nbsp;&nbsp;bool&nbsp;AccesingX&nbsp;=&nbsp;ScriptA.X; &nbsp;&nbsp;&nbsp;//&nbsp;or&nbsp;you&nbsp;can&nbsp;do&nbsp;this&nbsp;also&nbsp; &nbsp;&nbsp;&nbsp;ScriptA.X&nbsp;=&nbsp;true; &nbsp;}}要么ScriptA.csClass&nbsp;ScriptA&nbsp;:&nbsp;MonoBehaviour{//you&nbsp;are&nbsp;actually&nbsp;creating&nbsp;instance&nbsp;of&nbsp;this&nbsp;class&nbsp;to&nbsp;access&nbsp;variable. &nbsp;public&nbsp;static&nbsp;ScriptA&nbsp;instance; &nbsp;void&nbsp;Awake(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;give&nbsp;reference&nbsp;to&nbsp;created&nbsp;object. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instance&nbsp;=&nbsp;this; &nbsp;} &nbsp;//&nbsp;by&nbsp;this&nbsp;way&nbsp;you&nbsp;can&nbsp;access&nbsp;non-static&nbsp;members&nbsp;also. &nbsp;public&nbsp;bool&nbsp;X&nbsp;=&nbsp;false;}ScriptB.csClass&nbsp;ScriptB&nbsp;:&nbsp;MonoBehaviour{ &nbsp;void&nbsp;Update()&nbsp;{ &nbsp;&nbsp;&nbsp;bool&nbsp;AccesingX&nbsp;=&nbsp;ScriptA.instance.X; &nbsp;&nbsp;&nbsp;//&nbsp;or&nbsp;you&nbsp;can&nbsp;do&nbsp;this&nbsp;also&nbsp; &nbsp;&nbsp;&nbsp;ScriptA.instance.X&nbsp;=&nbsp;true; &nbsp;}}有关更多详细信息,您可以参考singleton类。
打开App,查看更多内容
随时随地看视频慕课网APP