unity3d Unity:如何在不同的函数中销毁示例化对象

puruo6ea  于 2022-12-04  发布在  其他
关注(0)|答案(2)|浏览(216)

我正在尝试做一个游戏,这个游戏正在生成一个对象,当这个对象被销毁后,另一个对象会立即生成。但是现在我正在尝试在另一个函数中销毁一个示例化对象,它不起作用。
`

public GameObject[] food;
    public Vector3Int spawnPosition;

    public void Start()
    {
        SpawnFood();
    }

    //Spawning food 
    public void SpawnFood()
    {
        int random = Random.Range(0, food.Length);
        GameObject clone = (GameObject)Instantiate(food[random], this.spawnPosition, Quaternion.identity);
    }

    private void Update()
    {
        if(Input.GetKeyDown(KeyCode.C))
        {
            Destroy(this.gameObject);
        }
    }

`
我试着对此做了一些研究,但我仍然只能找到在示例化的同一个函数中销毁对象的解决方案。

vuktfyat

vuktfyat1#

当您调用Destroy(this.gameObject)时,脚本所附加到的游戏对象将被销毁,此后您将无法调用脚本。
我猜您要销毁的是food游戏对象,而不是此处显示的脚本所攻击的游戏对象。
快速调整,以满足您的需求:

...
private GameObject clone
...
private void Update()
{
    if(Input.GetKeyDown(KeyCode.C))
    {
        if (clone != null)
          Destroy(clone);
    }
}

正如@丹尼尔seggested所言,如果你要重复示例化/销毁食物游戏对象,更好的方法是使用同一个食物对象并更改其属性(例如位置...)来创建new food game object pop-up illusion
这里的关键思想称为Object Pooling

1u4esq0p

1u4esq0p2#

以下是您的答案:
声明一个公共游戏对象:

public GameObject clone;

并且更换了

GameObject clone = (GameObject)Instantiate(food[random], this.spawnPosition, Quaternion.identity);

GameObject clone = Instantiate(food[random], this.spawnPosition, Quaternion.identity);

然后在另一个函数或类中销毁

public void DestroyFood()
{

Destroy(clone);

//you can instantiate another gameobject here

}

相关问题