【问题标题】:C# Unity - Trying to access a variable from another scriptC# Unity - 尝试从另一个脚本访问变量
【发布时间】:2016-02-26 16:51:46
【问题描述】:

我目前正在尝试在统一的脚本之间传递一个变量,之前发布的所有问题似乎都无济于事,如果有任何事情比预期的更混淆了这个问题。

我的问题是,我的 PlayerController 脚本中有一个名为 count 的整数,并且在另一个名为 BounceObject 的脚本中需要 count 变量,以便在 if 语句中进行比较。

这是我的播放器控制器脚本,缺少部分代码。

public int count;

void SetCountText()
{
    countText.text = "Score: " + count.ToString (); 
    if (count >= 12)
    {
        winText.text = "You have won!";
    }
}

这是我试图访问计数变量的脚本,名为 BounceObject

public PlayerController script;
void Start()
 { 
    script = getComponent<PlayerController>();
 }

void Update()
 {

if (script.count >= 8)
{
    #Do Stuff here...
}

 }

我不确定我的代码是否有错误。作为参考,BounceObject 脚本只能在一个预制件中找到,然后我将其导入到我的游戏中。 count 的整数也会发生变化,因此在 PlayerController 中发生变化时需要在 BounceObject 脚本中进行更新。

非常感谢!

【问题讨论】:

  • PlayerControllerBounceObject 所附加的同一个游戏对象的组件吗?
  • 如果您使用 GetComponent,则不得将变量标记为“public”。如果您将变量标记为“public”,则不得使用 GetComponent。 (如果您将其标记为公开,则必须在编辑器中将其拖到插槽中 - 你知道)?
  • 难以置信的完整答案:stackoverflow.com/a/35555776/294884
  • @Taelsin 不,它不在同一个游戏对象中

标签: c# unity3d


【解决方案1】:

假设您的 PlayerController 位于与 BounceObject 脚本不同的对象上,您需要指定要从哪个游戏对象获取组件。如果你给你的播放器对象一个只有它才有的标签,你可以这样做:

public PlayerController script;
void Start() { 
    script = GameObject.FindWithTag("Player1").GetComponent<PlayerController>();
}

否则,您需要使用不同的方法来获取玩家游戏对象,然后才能获取其PlayerController 脚本。

我使用的参考资料:FindWithTagGetComponent

【讨论】:

  • 请不要回答百万次重复
  • @Taelsin 这对预制件有什么作用?效果一样吗?
  • @Robertgold 它应该同样适用于预制件。将预制件视为游戏对象的模板
  • 稍后会测试,如果出现问题会报告会发生什么!
  • 这适用于初学者。但是很快,您可能想要使用 List 来传达您的对象并从中进行选择。 Findwithid 或 Findwithtag 是“非常慢”。
猜你喜欢
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 2022-07-02
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
相关资源
最近更新 更多