2016-02-22 75 views
1

由於某些原因,我無法更改遊戲對象(頭像)的名稱,但我需要有2個不同版本並在代碼中激活它們。激活非活動相同名稱的不同標記遊戲對象

所以,複製頭像是不是一種選擇,但我仍然需要創建一個相同,並在編輯模式的改變,因此,基於一個條件,確定是否一個其他選擇。

我突然想到,現在更改名稱是不可能的,也許我可以給其他不同標籤並激活根據選定的方案是正確的。

所以,我檢查了幾個手動文檔和一些論壇帖子,並提出了以下3個方案在我Start()的地方,但沒有工作:

void Start() 
{ 
    if (GameObject.FindGameObjectWithTag("John")) 
     gameObject.FindGameObjectWithTag("John").SetActive(true); 

    if (GameObject.FindWithTag("John")) 
     gameObject.FindWithTag("John").SetActive(true); 
} 

是否有人可以幫助我瞭解我是什麼做錯了,我怎麼能做到這一點:找到一個對象,它是不活躍從其中2個非活動名稱相同的對象,但不同的標籤:一個untagged和其他標記爲,比如說,John

+1

***注意*** - 你的代碼的一行非常混亂,因爲它是指到「這個」遊戲對象。我編輯它以避免混淆。 – Fattie

回答

3

可能不容易,只需將它們分配給不同的變量

public GameObject johnCharacterOnLeft; 
public GameObject johnCharacterWhoJoinsLater; 

void Start() 
    { 
    johnCharacterOnLeft.SetActive(true); 
    johnCharacterOnLeft.Whatever(true); 
    johnCharacterOnLeft.Whatever(true); 
    johnCharacterOnLeft.Whatever(true); 
    johnCharacterWhoJoinsLater.SetActive(false); 
    johnCharacterWhoJoinsLater.Whatever(false); 
    johnCharacterWhoJoinsLater.Whatever(false); 
    ... 
    } 

注意,作爲一項規則,當你正在學習,使用查找。就這麼簡單。使用公共變量並拖動以在檢查器中連接。

enter image description here

(如果有人讀還不知道如何拖動到檢查連接,檢查任何基本tutorial


如果你想找到所有對象與某種標籤

GameObject[] allCats; 
allCats = GameObject.FindGameObjectsWithTag("cat"); 
foreach (GameObject g in allCats) 
Debug.Log("I found one, name is: " +g.name); 

如果你想找到那些具有特定名稱的一個你必須通過所有這些搜索..

GameObject[] allCats; 
allCats = GameObject.FindGameObjectsWithTag("cat"); 
foreach (GameObject g in allCats) 
{ 
Debug.Log("I found one, name is: " +g.name); 
if (g.name == "Felix") 
    { 
    Debug.Log("I did find Felix the cat"); 
    g.Whatever ... 
    } 

如果你想找到所有對象具有一定 ...它只是沒有任何意義 -

明白

......你不能這樣做,在團結是非常重要的。

生活的生活 - Find是一個黑客,你永遠不應該真正使用反正,除非在罕見的情況下。如果你(出於某種原因?)需要「找到」具有特定名稱的所有遊戲對象,你要簡單地去翻每一件事情場景(這是特別不容易做到)。你可以輕鬆地谷歌這一點。但是,絕對沒有理由你會這樣做。

請注意,只是一個例子 ..說你有一些「貓」的東西在你的場景。 很簡單 - 沒有什麼比這更復雜 - 你讓他們都在同一個「文件夾」。 (也就是說,所有人都在同一持有者的遊戲對象下)。這只是一種非常簡單的方法,可以徹底避免您遇到的問題。

同樣有字面上沒有辦法找到「具有相同名稱的所有遊戲對象」 - 的Find調用是本來就不應該在Unity黑客攻擊;他們明確沒有


而最重要的是不要忘記...找不工作,如果不活動!

Find調用是一個絕對不應該在Unity中的黑客:永遠記住它甚至不會在非活動對象上工作。因爲他們投入了「查找名稱」的概念,所以最好不要用於非活動對象:但整個事情是一團糟 - 只是不要使用「查找」。

特別是初學者只需將在檢查 - 這是老老實實容易。 (再次,在幾乎所有情況下你的東西將啓動不活動,所以當然你必須這樣做,因爲你不能「找到」不活躍的東西。)

(和記 - 不要忘記,如果你只是找到一個「老闆」類型的腳本,說你的ScoresSoundEffects,從來沒有使用查找,只是做this easy idiom。)

+0

謝謝喬。我嘗試了第一部分,但都沒有找到。這是否可以歸因於它們最初都是不活動的? – Joshua

+0

當然,我不能使用公共'GameObject johnCharacterOnLeft;'的方式,因爲它們都被命名爲相同的東西,但標籤是不同的。 – Joshua

+0

Hi @Jtech。我可以絕對保證你使用'public GameObject johnCharacterOnLeft'將我的代碼複製到腳本中。 **不要忘記拖動檢查器**的連接。現在工作好嗎? – Fattie