代码的某些部分有效(hp1 -= damage1;
),但是第二部分不起作用。
我在哪里弄错了?
这是两个脚本的一部分:
Player1.cs
private Bullet1 b1;
void Start()
{
b1 = FindObjectOfType<Bullet1>();
}
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.tag == "Bullet1")
{
hp1 -= damage1; // it works, my player loses hp
Destroy1(); // doesn't work
}
}
void Destroy1()
{
b1.hit1 = true; // hit for bullet1.cs
}
Bullet1.cs
public bool hit1;
void Update()
{
if (hit1)
{
hit1 = false;
Destroy(gameObject);
}
}
如果我在Unity中实时切换bool hit = true
,将会破坏工作。这意味着Bullet1.cs
无法收到hit = true;
如果我交换了hp1 -= damage1;
和 Destroy1();
行,我的玩家将无法受到伤害。因此,Destroy1();
停止了我的代码,然后无法激活其他行。另外,如果我将Destroy1();
更改为b1.hit1 = true;
,也不会发生新情况。
答案 0 :(得分:2)
只需通过碰撞销毁子弹即可,而不是使用布尔值。它正在创建不必要的资源使用情况。在给定的代码中,这是使用播放器脚本销毁子弹所需要做的全部工作。所显示的项目符号脚本的各部分是不必要的。如果您希望在销毁子弹时处理其他逻辑,请使用OnDestroy函数来处理它。
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.tag == "Bullet1")
{
hp1 -= damage1;
Destroy(col.gameobject);
}
}