一行停止脚本C#Unity

时间:2019-05-31 18:59:06

标签: c# unity3d

代码的某些部分有效(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;,也不会发生新情况。

1 个答案:

答案 0 :(得分:2)

只需通过碰撞销毁子弹即可,而不是使用布尔值。它正在创建不必要的资源使用情况。在给定的代码中,这是使用播放器脚本销毁子弹所需要做的全部工作。所显示的项目符号脚本的各部分是不必要的。如果您希望在销毁子弹时处理其他逻辑,请使用OnDestroy函数来处理它。

void OnCollisionEnter2D(Collision2D col)
{
    if (col.gameObject.tag == "Bullet1")
    {
        hp1 -= damage1;
        Destroy(col.gameobject); 
    }
}