2014-02-10 26 views
0

我是Unity3D和C#的新手,所以我不完全確定我在做什麼錯在下面的場景。Unity3d - GetComponentInChild在C#中傳遞數據#

在Unity3D中,我試圖獲得一個變量(目標)的值,當玩家足夠接近敵人時,該值會更新,腳本將目標從null更改爲'enemy'並獲取位置等等等等。

在其上有一個用於自動定位的腳本的炮塔是主玩家gameobject的孩子。

每當我使用以下命令:

targettingScript target; 

target = gameObject.GetComponent<targettingScript>(); 
// or--- 
target = gameObject.GetComponentInChildren<targettingScript>(); 

...然後我就可以用那個的debug.log它不拉「空」,因爲它應該在啓動測試,但它似乎沒有不當炮塔發現一個目標並且從零改變目標時更新。

我已經在各個領域讀過幾篇論壇帖子,有人說你不能這麼做(將數據從一個子組件腳本傳遞給另一個實例化的遊戲對象(IE),目標完成後導彈發射,然後做一種尋的導彈式的跟蹤)和其他人說,他們通過檢查遊戲對象的所有級別,直到他們找到他們想要的東西,但我不明白這是什麼意思。

我的問題是,1 - 是否有可能將一個兒童遊戲物體組件的變量傳遞給另一個實例化的遊戲對象2 - 如果是這樣,怎麼辦?

我很抱歉,如果這是一個簡單的概念,但我不知道如何排除故障。 我要建立一個新的場景,並嘗試各種gameObject和子對象,看看我能鼓起什麼,如果我找到有用的東西,我會在這裏發佈它。

與此同時,非常感謝大家花時間回顧我的問題。

+0

Unity編輯器中的層次結構窗格中的遊戲層次結構如何? – Roberto

+0

現在它有點混亂,因爲我只是試圖建立一些基本的機制,一次學習統一。 我的玩家是一個空的遊戲物體,有一個基座'船體'。炮塔在小時候,炮塔上的瞄準片和射擊點都是小孩,並且在炮塔遊戲物體下方有不同的分支。 我結束了使用findgameobjectwithtag,我似乎有正確的變量,剛纔讓導彈跟蹤它是下一個有趣的部分。 –

回答

0

肯定,

因爲你實例化對象的運行時間,你應該保持它的軌道,

public GameObject target; 

public void Update() { 
    // if we dont have a target (find it). 
    if(target == null) { 
     target = GameObject.Find("Player"); 
    } 

    // if we found the target take some health each frame. 
    if(target != null) { 
     playerhealth = player.GetComponent<PlayerHealth>(); 
     playerhealth.health--; 
    } 
} 

,你當然也可以添加一個距離探測器的發現。

if(target != null) 
if(Vector3.distance(transform.position, target.transform.position) < 5) { 
    // target in range 
} else { 
    // to far away ignore it. 
    target = null; 
} 

做你必須跟蹤他們,如果你要引用它們後來,從而實現一個管理者,這是否當你instansiating gameobjects運行的最好的事情,創建一個空的遊戲物體,添加使用MgrScript,並讓其他對象將其稱爲MgrScript.SpawnEnemy(),這樣我們就可以從數組或類似的東西中引用敵人。

如果您不使用管理器,且場景簡單而小巧,則始終可以使用標籤來引用遊戲對象,因爲在您有大型複雜場景時按名稱引用是個不好主意,因爲您很可能引用錯誤的項目。

+0

謝謝,這引導我朝着正確的方向前進。我原來並沒有走上正軌。我最終做了一些更多的研究,並考慮了上面關於經理的問題。我遇到了一個在他們的管理器中使用FindGameObjectWithTag的教程,並閱讀了文檔並獲得了我想要的變量。現在我只需要找到那個遊戲物體的位置,然後讓我的導彈飛起來!哈哈謝謝。 –