2015-09-07 159 views
0

我正在創建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中工作正常......感謝您的回答......我已經有一些建議第二個答案,如「對象池」我會嘗試....到那個時候,如果你有什麼請讓我知道.....謝謝你:) :) –

回答

0

銷燬對象的正確方法並不是破壞它們:)。

你在控制檯內獲得的信息是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

請標記我的問題是正確的,如果它幫助你:) –