2015-11-22 38 views
1

我摧毀一個對象在我的遊戲在該方法中:團結「類型的對象已被破壞」的錯誤

public override void triggerAction(GameObject cube) 
{ 
    base.triggerAction(cube); 

    if (cube.GetComponent<Cube>().type == type) { 
     DestroyObject(cube); 
    } 
} 

,我得到了一個 'The object of type 'Cube' has been destroyed but you are still trying to access it.'錯誤指向這個方法(第一行) :

if (Physics.Raycast(gameObject.transform.position, rayDir, out hit, 1f) && (hit.collider.gameObject.layer == layerMask)) { 
     ActionObject obj = hit.collider.gameObject.GetComponent<ActionObject>(); 
     obj.triggerAction(gameObject); 
} 

在'Update'循環中調用此方法。

我在電視上看到我們來測試一下,如果遊戲對象不爲空淨,但是當我測試了一下,我上了條件相同的錯誤:

if (gameObject != null) { ... } 

謝謝您的回答!

編輯:這是我如何實例化我的目標=

public GameObject cube; // I put my prefab in the inspector 
... 
GameObject newCube = Instantiate(cube) as GameObject; 
+0

if(GetComponent ()!= null){...}我不確定,但嘗試。 –

+0

當我寫它時,光線投射條件不起作用。 – Karz

+0

不工作?錯誤? –

回答

0

我解決我的問題,這是一個委託方法,這是我的目標,我剛刪除它。

0

我不能肯定,但由於這種方法被稱爲在Update,很可能你正試圖摧毀同一對象(實際上,組件)兩次。

RayCast通話只需要對撞機賬戶,所以當你從cube對象刪除Cube組件,除非Cube是對撞機,在下一幀中,同一對象尚可RayCast的目標。但是這一次,該對象將不會有任何Cube組件,並且您將收到'The object of type 'Cube' has been destroyed but you are still trying to access it.'錯誤。

要解決這個問題,你可能要檢查Cube組件是否對象爲空或不是,不是本身:

if (gameObject.GetComponent<Cube>() != null) { ... } 
+0

我測試了它,並且在你寫的這行代碼中遇到了同樣的問題。 – Karz