Unity2d - 使用Destroy(gameObject)销毁对象//它将销毁附加脚本的对象

时间:2015-09-07 03:49:00

标签: unity3d

我正在创建Unit2D游戏&我是新手,我已经为摧毁陨石(或敌人)时摧毁玩家Bullete编写了代码。 我有一个Bullete PREFAB。 Destroybullete脚本附加到哪个。我在TRIGGER函数下编写了普通代码(C#脚本)。

void OnTriggerEnter2D(Collider2D col)
{
    if(col.gameObject.tag == "meteorite") // have given meteorite tag to meteorite PREFAB
    {
        Destroy(gameObject)
    }
} 

我想知道它是否是破坏任何物体的正确方法。因为它一直向我显示“避免破坏对象以避免数据丢失”。

和主要的事情。 此代码在Unity Editor中很有效(Build Settings设置为android)。 但是,如果我在我的Android手机(redmi 1s)上构建并创建它的..........它不起作用.Bullete开始自动射击(根据需要)但是因为任何bullete击中陨石而不是游戏滞后因为毫秒而且项目符号停止射击....而且同样的代码在统一下工作。

意味着我通过编写Destroy(gameObject)来杀死bullete prefab。

  • 需要解释和解决方法以正确的方式销毁对象。

1 个答案:

答案 0 :(得分:1)

破坏物体的正确方法不是破坏它们:)。

你在Unity内的控制台中获取的消息只是一个警告,试图避免破坏对象,主要原因是Destroy和Instantiate是非常昂贵的命令,它们经常被使用很多(比如你的例子,然后实例化每个子弹)摧毁它。)

它在PC上运行良好的原因是因为与移动设备相比,您拥有更高的硬件处理能力,而您在移动设备上的延迟是完成Destroy命令(或实例化)所需的时间。

您可以避免使用实例化和销毁对象的方法是使用对象池,这是一种重用小对象池的简单方法。

以下是实现它的简单方法:  1.实例化让我们在开始时说5个子弹,并将它们隐藏在barrell或类似的东西中。  2.从枪管发射第一颗子弹,当它击中某物时,只需将其移回阵列末端的枪管。  3.继续重复使用子弹

您可以在此处深入了解对象池:https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/object-pooling

但是你可以更少地理解对象池,如果这太长时间尝试在线搜索类似于" Unity3D对象池"并找到更简单的tuorial。