Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用来自另一个脚本int Unity 5的变量_C#_Variables_Unity3d_Scripting - Fatal编程技术网

C# 使用来自另一个脚本int Unity 5的变量

C# 使用来自另一个脚本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

我需要使用脚本中定义的一些变量,但当我调用它们时,它们的值是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<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()将正常工作。我确实意识到我应该把这件事告诉肖恩,以防他还不知道。但是谢谢!通常情况下,不要在联合体中这样做。通常情况下,不要在联合体中这样做