Unity2d - 销毁对象使用销毁(gameObject)//它会销毁与脚本连接的对象

问题描述:

我正在创建Unit2D游戏&我对它很陌生,在那里我写了破坏播放器项目符号的代码到陨石(或敌人)。 我有一个Bullete PREFAB。附有Destroybullete脚本。我在TRIGGER函数下编写了正常的代码(C#脚本)。Unity2d - 销毁对象使用销毁(gameObject)//它会销毁与脚本连接的对象

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

我想知道是否是正确的方式来销毁任何对象。因为它不断向我显示msg,“避免销毁对象以避免数据丢失”。

和主要的事情。 此代码在Unity编辑器(Build Settings设置为android)中工作良好。 但是,如果我在我的android手机(redmi 1s)上构建并创建它的APK,它不起作用.Bullete开始自动发射(根据需要),但任何bullete都会触及陨石而不是游戏滞后时间为毫秒,子弹停止射击......并且同一代码在UNITY下工作得很好。

是否意味着我已经通过编写Destroy(gameObject)杀死了bullete prefab。

  • 需要解释和解决方案,以正确的方式销毁对象。
+0

我只见过这条消息,当你试图摧毁一个预制件。代码看起来没问题,据我所知,这是一种可以接受的方式来做你想做的事。你有可能不小心做了一个名为“gameObject”的新变量? – Reasurria

+0

不,没有名称为gameObject的变量。现在团结警告OHK!摧毁物体哦!游戏在PC上很好用哦!现在我唯一的问题是为什么在BULLETE和METEORITE bullete之间的第一次碰撞后突然停止射击(在移动设备上)......并且同样的事情在Unity编辑器PC中工作正常......感谢您的回答......我已经有一些建议第二个答案,如“对象池”我会尝试....到那个时候,如果你有什么请让我知道.....谢谢你:) :) –

销毁对象的正确方法并不是破坏它们:)。

你在控制台内获得的信息是Unity中的一个警告,它只是避免销毁对象的一个​​警告,主要原因在于Destroy和Instantiate是非常昂贵的命令,而且它们经常被使用很多(就像你的例子,实例化每一个子弹然后摧毁它)。

它在PC上运行良好的原因是因为与移动设备相比,硬件的处理能力要高得多,并且在移动设备上的滞后时间是完成Destroy命令(或实例化)所需的时间。

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

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

你有很好的深入解释有关对象池的位置:https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/object-pooling

但是你可以用对象池的了解要少得多脱身,如果太长尝试搜索网上的东西像“Unity3D对象池”,并找到更简单的tuorial。

+0

奥克罚款我会尽力让你知道............... thanx为你的建议... –

+0

Thanx为你的suggetion ......我已经尝试过对象池...并且工作正常....我正在使用对象池方法调用所有东西... THANX! –

+0

请标记我的问题是正确的,如果它帮助你:) –