我在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显示不同的结果,而它们应该显示相同的结果
答案 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; }