【问题标题】:Using variables from another script int Unity 5使用来自另一个脚本 int Unity 5 的变量
【发布时间】:2016-06-01 18:23:07
【问题描述】:

我需要使用脚本中定义的一些变量,但是当我调用它们时,它们的值为 0。我不知道我做错了什么。

例子:

Script1.cs

public int cont;


public void Method() { cont++; }

void Update() { Method(); }

Script2.cs

public Script1 usingScript1;

void MethodX()
{
    usingScript1.GetComponent<Script1>();
    Debug.Log(usingScript1.cont);
}

void Update() { MethodX(); }

这个脚本应该显示“cont”变量增加,因为它是从 Update() 调用的,但是这没有发生。当我调用它时,它是0并且不增加。

另外,我在 Ispector 中引用了包含 Script1.cs 的对象。这一定是我想念的一件简单的事情。我什至尝试调用 Method()。

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为它重复了无数次。有趣的是,这是尝试 Unity 的新爱好者提出的关于 Unity 的最常见问题。
  • “永远不要使用更新...专家永远不需要使用它” - 不正确。 "Update is the most commonly used function to implement any kind of game behaviour"
  • 嗨@JoeBlow,你是说在涉及RigidBodies 时避免Update 吗?在那种情况下,我同意你的看法。否则,覆盖 Update 并没有什么问题,正如您在我的漂亮 GPGPU n-Body galaxy simulation 中看到的那样。 :)

标签: c# variables unity3d scripting


【解决方案1】:

我设法解决了它,但从未想过它。就这么简单。除了创建对象之外,我只是将变量设为静态并使用类调用它们。

Script1.cs

public static cont;

Script2.cs

Script1.cont;

而且它有效。

【讨论】:

  • 通常不要在 Unity 中这样做
【解决方案2】:

只是为了补充大家提到的内容,您是否尝试过初始化“cont”?

这个

public int cont;

变成

public int cont = 0; 

如果这不起作用,请尝试在 Start() 函数中对其进行初始化。

【讨论】:

    【解决方案3】:

    在这段代码的任何地方都不会调用名为 Method() 的函数。由于它是唯一会修改名为 cont 的变量的值,因此如果从未调用它,则 cont 将永远不会从其默认值零更改。

    编辑:哎呀! 好的,这里的实际问题是你需要改变

    usingScript1.GetComponent<Script1>();
    

    usingScript1 = GetComponent<Script1>();
    

    后一行代码设置变量 usingScript1 以便您可以在代码中使用它。前者只是简单地调用一个函数,而不对它返回的信息做任何事情。

    编辑:GetComponent() 仅在两个脚本附加到同一个游戏对象时才有效。否则,您可以使用 FindObjectOfType()。

    【讨论】:

    • 仅仅因为它不是你会做的方式并不意味着它是错误的......你不必对我的答案投反对票......
    • 嗨哈普!我不反对。你的脚本是错误的......你正在考虑像 Find("that game object").GetComponent ...
    • 如果两个脚本在同一个游戏对象上,GetComponent() 就可以正常工作。我确实意识到我应该通知肖恩,以防他还没有意识到。不过谢谢!
    猜你喜欢
    • 2019-01-08
    • 2012-09-13
    • 2014-08-16
    • 2018-01-19
    • 1970-01-01
    • 2019-11-05
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多