如何防止在Unity中破坏对象的所有实例?

时间:2019-04-03 21:59:19

标签: c# unity3d physics instance-variables

我有一个名为Beam的预制对象,其中包含一些东西,但其中一个是当其实例与之碰撞并被触发时应自行销毁的对象。

当前,我具有在名为Beams的变量上生成所有实例的脚本。如图所示:

enter image description here

运行时,它将在其中创建克隆。在这里看到:

enter image description here

您还将在最后一个图像中看到其中包含Cookie的Beam预制件。该cookie是我有一个脚本的地方,如果我点击它,则销毁它。该代码如下所示:

...

public class Collectibles : MonoBehaviour
{
    GameManager game;

    // Start is called before the first frame update
    void Start()
    {
        game = FindObjectOfType<GameManager> ();
    }

    ...

    void OnTriggerEnter2D(Collider2D other) {
        if(other.tag == "Player"){
            string coinType = "Cookie";
            game.AddCollectible(coinType);
            Destroy(gameObject);
        }


    }
}

当前,当我遇到一个cookie时,它将运行Destroy(gameObject)并销毁该cookie的所有实例(每个克隆一个)。

此代码位于Cookie上,而不位于Beams上。那是对的吗?我应该在其他地方有代码吗?我也尝试了Destroy(this),但这并没有达到我的预期(只是实例)。

是否有可能在我调用Destroy的地方脚本无法访问实例,或者我丢失了某些东西?预先谢谢你!

1 个答案:

答案 0 :(得分:0)

如果我理解您的问题,您希望当“玩家”与“光束”实例碰撞时,仅销毁Cookie(或包含脚本的游戏对象)实例,在这种情况下,它将与标签:

public GameObject[] arrayofcookie;

public int destroyedinstances=1; 
//this int will tell how many instances you want to be destroyed (from the last instantiated to the first)

//for this example the last instance will be deleted


public void destroyCookie()
{
    arrayofcookie= GameObject.FindGameObjectsWithTag("Cookie");
    for (int i = 0; i < destroyedinstances; i++)
    {
        Destroy(arrayofcookie[i].gameObject);
    }
}

您可以在cookie脚本中,对撞机中调用此方法,或者如果愿意,可以在N秒后调用invoke方法。

我认为我不太了解您的问题,但是在这些问题中,我更喜欢使用标签,这也取决于您游戏的性质