我正在创建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。
答案 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。