Unity中不同脚本之间的静态变量更改?

时间:2019-05-05 19:08:34

标签: c# unity3d static

我在Unity的两个不同脚本中都有一个名为gethealth的变量。我在第一个名为PlayerController的脚本中将其创建为静态公共浮动。当我尝试从另一个脚本(称为“运行状况”)访问它时,即使它应该是相同的变量,它也会显示完全不同的内容。

我通过在两个脚本中使用debug.log来检查是否相同,并且以某种方式显示了不同之处。一路走来,一定已经改变了。

第一个脚本(我创建并设置gethealth变量的PlayerController类):

public float health = 250f;
static public float gethealth;

private void OnTriggerEnter2D(Collider2D col)
{
    PlayerLaser missile = col.gameObject.GetComponent<PlayerLaser>();
    if (missile)
    {
        health -= missile.GetDamage();
        gethealth = health;
        Debug.Log(gethealth);
        missile.Hit();
    }
}

第二个脚本(运行状况类):

void Start()
{
    Debug.Log(PlayerController.gethealth);
    Text myText = GetComponent<Text>();
    myText.text = PlayerController.gethealth.ToString();
}

两个debug.log显示不同的结果,而它们应该显示相同的结果

1 个答案:

答案 0 :(得分:0)

您问为什么它显示不同的内容,但是您提供的代码告诉我们它应该显示不同的内容。在运行状况类上,您正在开始上记录PlayerController.gethealth。 (有关启动方法的文档,请参见:https://docs.unity3d.com/ScriptReference/MonoBehaviour.Start.html

在PlayerController上,在减少健康状况并重新分配其健康状况后,您正在登录gethealth

除非您的代码中的某些部分缺少应发生的内容,否则Health类将记录0(浮点数的默认值)。之后,PlayerController记录的数字小于250(250-missile.GetDamage())。每当记录OnTriggerEnter2D时都会发生此日志记录,从而减少了显示的次数。

您可能想要的是在Awake方法中设置gethealth属性(请参见上一文档链接)

Awake() { gethealth = health; }