C# 使用来自另一个脚本int Unity 5的变量
我需要使用脚本中定义的一些变量,但当我调用它们时,它们的值是0。我不知道我做错了什么 例如: 脚本1.csC# 使用来自另一个脚本int Unity 5的变量,c#,variables,unity3d,scripting,C#,Variables,Unity3d,Scripting,我需要使用脚本中定义的一些变量,但当我调用它们时,它们的值是0。我不知道我做错了什么 例如: 脚本1.cs public int cont; public void Method() { cont++; } void Update() { Method(); } public static cont; 脚本2.cs public Script1 usingScript1; void MethodX() { usingScript1.GetComponent<Script
public int cont;
public void Method() { cont++; }
void Update() { Method(); }
public static cont;
脚本2.cs
public Script1 usingScript1;
void MethodX()
{
usingScript1.GetComponent<Script1>();
Debug.Log(usingScript1.cont);
}
void Update() { MethodX(); }
Script1.cont;
使用Script1的公共Script1;
void MethodX()
{
使用Script1.GetComponent();
Debug.Log(使用script1.cont);
}
无效更新(){MethodX();}
这个脚本应该显示“cont”变量,因为它是从Update()调用的,但事实并非如此。当我调用它时,它是0,并且不增加
另外,我在Ispector中引用了包含Script1.cs的对象。这一定是我错过的一件简单的事情。我甚至尝试调用Method()。在这段代码中,名为Method()的函数从未被调用过。因为它是唯一修改名为cont的变量值的东西,如果从未调用它,cont将永远不会改变其默认值零
编辑:哇!
好的,这里的实际问题是你需要改变
usingScript1.GetComponent<Script1>();
使用script1.GetComponent();
到
使用script1=GetComponent();
后一行代码使用Script1设置变量,以便您可以在代码中使用它。前者只调用函数,而不使用返回的信息执行任何操作
编辑:GetComponent()只在两个脚本连接到同一个游戏对象时才起作用。否则,您可以使用FindObjectOfType()。此代码中的任何地方都不会调用名为Method()的函数。因为它是唯一修改名为cont的变量值的东西,如果从未调用它,cont将永远不会改变其默认值零
编辑:哇!
好的,这里的实际问题是你需要改变
usingScript1.GetComponent<Script1>();
使用script1.GetComponent();
到
使用script1=GetComponent();
后一行代码使用Script1设置变量,以便您可以在代码中使用它。前者只调用函数,而不使用返回的信息执行任何操作
编辑:GetComponent()只在两个脚本连接到同一个游戏对象时才起作用。否则,您可以使用FindObjectOfType()。只是为了添加大家提到的内容,您是否尝试过初始化“cont” 这个 变成
public int cont = 0;
如果这不起作用,还可以尝试在Start()函数中初始化它 为了补充大家提到的内容,您是否尝试过初始化“cont” 这个 变成
public int cont = 0;
如果这不起作用,还可以尝试在Start()函数中初始化它 我设法解决了这个问题,但从未想过。就这么简单。在创建对象的过程中,我只是将变量设置为静态,并使用类调用它们 脚本1.cs
public int cont;
public void Method() { cont++; }
void Update() { Method(); }
public static cont;
脚本2.cs
public Script1 usingScript1;
void MethodX()
{
usingScript1.GetComponent<Script1>();
Debug.Log(usingScript1.cont);
}
void Update() { MethodX(); }
Script1.cont;
它是有效的。我设法解决了它,却从未想过。就这么简单。在创建对象的过程中,我只是将变量设置为静态,并使用类调用它们 脚本1.cs
public int cont;
public void Method() { cont++; }
void Update() { Method(); }
public static cont;
脚本2.cs
public Script1 usingScript1;
void MethodX()
{
usingScript1.GetComponent<Script1>();
Debug.Log(usingScript1.cont);
}
void Update() { MethodX(); }
Script1.cont;
这是可行的。我投票决定把这个问题作为离题题来结束,因为它是无数次的重复。有趣的是,这是关于Unity的一个最常见的问题,来自尝试Unity的新爱好者。“不要使用EverUpdate…专家永远不需要使用它”-不正确。“嗨@JoeBlow,你是说当涉及到
刚体时要避免更新?那样的话,我同意你的看法。否则,重写Update
并没有什么问题,正如您在my spiffy中看到的那样:我投票结束这个问题,因为它是无数次的重复。有趣的是,这是关于Unity的一个最常见的问题,来自尝试Unity的新爱好者。“不要使用EverUpdate…专家永远不需要使用它”-不正确。“嗨@JoeBlow,你是说当涉及到刚体时要避免更新?那样的话,我同意你的看法。否则,重写Update
并没有什么问题,正如您在my spiffy中看到的那样:只是因为这不是你会做的,并不意味着这是错误的。。。你不必去投票表决我的答案…嗨,哈尔普!我不投反对票。你的剧本错了。。。您正在考虑查找(“该游戏对象”).GetComponent……如果两个脚本位于同一个游戏对象上,GetComponent()将正常工作。我确实意识到我应该把这件事告诉肖恩,以防他还不知道。但是谢谢!只是因为这不是你会做的,并不意味着这是错误的。。。你不必去投票表决我的答案…嗨,哈尔普!我不投反对票。你的剧本错了。。。您正在考虑查找(“该游戏对象”).GetComponent……如果两个脚本位于同一个游戏对象上,GetComponent()将正常工作。我确实意识到我应该把这件事告诉肖恩,以防他还不知道。但是谢谢!通常情况下,不要在联合体中这样做。通常情况下,不要在联合体中这样做