2016-04-09 182 views
0

我在實例化一個新對象,一旦它擊中邊界就銷燬舊對象。該對象在正確的位置實例化並具有正確的行爲,但是一個腳本不會更新對新對象的引用,即使我已將它寫入腳本中。對象引用在新對象實例化後不會更新

碰撞事件:

void OnTriggerExit2D(Collider2D other) 
{ 
    if (other.GetComponent<Rigidbody2D>() == projectile) 
    { 
     Respawn(); 
     Ammo -= 1; 
     SetAmmoCount(); 
     Destroy(GO); 
     UpdateReferences(); 
    } 
} 

UpdateReferences方法:

void UpdateReferences() 
{ 
    projectile = GameObject.FindGameObjectWithTag("Damager").GetComponent<Rigidbody2D>(); 
    tran = GameObject.FindGameObjectWithTag("Damager").GetComponent<Transform>(); 
    GO = GameObject.FindGameObjectWithTag("Damager"); 
} 

每次我運行遊戲它似乎並沒有能夠找到新對象。然而,我已經使用這種方法更新對象引用在其他腳本爲同一個對象,它工作得很好。不知道我做錯了什麼。

重生方法:

void Respawn() 
{ 
    GameObject.Instantiate(player, Vector3.zero, Quaternion.identity); 

    projectile.isKinematic = true; 
    isSpawned = true; 
} 

它編譯我用一些不好的名字來引用的對象和事情。是的,我正在實例化的對象是預製件。所以讀成Destroy()多一點,我突然想到一個問題我之前具有

void Respawn() 
{ 
    GameObject obj = GameObject.Instantiate(player, Vector3.zero, Quaternion.identity) as GameObject; 
    obj.tag = "Damager"; 
    projectile.isKinematic = true; 
    isSpawned = true; 
} 
+0

Post your Respawn();函數代碼 – Programmer

+0

'GameObject.Instantiate(Object,Vector3.zero,Quaternion.identity);'?該代碼不應該編譯。我想知道你在實例化什麼以及如何聲明這個對象。這是預製嗎?再次更新您的代碼。 – Programmer

+0

我使用一個公共的GameObject播放器來引用統一的預製 – geolaw

回答

0

+0

我想過這個,但我不知道GO是什麼。偉大的事情你自己想出來。 – Programmer

+0

是的,命名的東西是我不擅長的。感謝您的幫助。 – geolaw

0

替換爲你的重生功能。當使用Destroy()時,實際上也會銷燬對該對象的引用。因此,在嘗試創建新副本並將引用移至該副本時會產生問題。你應該使用的是GameObject.SetActive(),然後引用將全部更新到具有實例化的新對象以及上述問題中的引用更新。

+0

仍然是同樣的問題,引用沒有更新 – geolaw