函数未完成更新Script Unity C#中的变量



我刚开始统一,遇到了一个问题,我不知道如何解决,甚至不知道出了什么问题。我的公共void函数从另一个脚本中获取变量并更新它们,但当在update函数中调用它时,这些变量不会更新,而是记录0。

public void statsImport(float XPImport)
{
float XPlevel = XPImport; 
Debug.Log(XPlevel); 
}
void Update()
{
Debug.Log(XPlevel);
}

当调用Debug.Log时,会发生这种情况,表明它没有更新变量。

如有任何帮助,不胜感激。

我建议您花一些时间阅读C#中的变量作用域。您可以将这些看作是由{ }包围的块。

当您在一个作用域内声明一个变量(例如使用float XPlevel = XPImport(时,该变量只存在于该作用域的内:

public void statsImport(float XPImport)
{
// start new method scope
// declare variable `XPlevel` inside of that scope
float XPlevel = XPImport; 
}
void Update()
{
// start new method scope
// `XPlevel` doesn't exist here
Debug.Log(XPlevel);
}

相反,您可能想要的是这样的东西,将XPlevel作为类范围内的字段

public class MyComponent : MonoBehaviour
{
// declare class-level field
private float XPlevel;
public void statsImport(float XPImport)
{
// `XPlevel` exists here
XPlevel = XPImport; 
}
private void Update()
{
// `XPlevel` exists here
Debug.Log(XPlevel);
}
}

如果希望能够在编辑器中编辑XPlevel的值,请添加[SerializeField]标记。这与公开XPlevel的效果相同,但只允许在脚本内部设置字段:

[SerializeField]
private float XPlevel;

一旦你对此感到满意,你也可以将XPlevel作为一个属性:

[field: SerializeField]
public float XPlevel { get; private set; }

最新更新