2016-07-26 94 views
0

我正在嘗試製作BTD遊戲。對於我的塔,我已經在每個GameObject中放置了一個升級按鈕,並將其附加到GameObject(塔)本身。每次選擇一個新塔時,出現新塔的按鈕,並且之前所選塔的按鈕消失。但是,我的問題是,即使按鈕的位置指示了相同的X,Y和Z值,我每次選擇一個新的塔樓時,按鈕的位置都會稍微有一點變化(足以忽略對齊)。我目前使用此代碼告訴按鈕爲GameTower位置:克隆對象的確切位置

clone.transform.GetChild(9).GetChild(0).localPosition = new Vector3 (-50, 17, 0). 

反正甚至通過克隆錨按下按鈕的位置(代碼的前一句是不工作我」? 。很樂意擴大,如果需要分享我的代碼

回答

0

我不知道爲什麼職位將突然改變 但我認爲你應該看看一些觀點

會發生什麼:在

  1. 按鈕的父母改變它的位置。
  2. 其他代碼可能會在您不知情的情況下干擾和更改位置。

使用getchild.getchild.localposition也是不正確的。 您應該嘗試製作一個知道其孩子的腳本,以便您可以直接從該腳本中獲取孩子。

像這樣

腳本對父

public GameObject ButtonsContainer 
{ 
    get 
    { 
     return buttonsContainer; 
    } 
} 

[SerializeField] private GameObject buttonsContainer; 

腳本改變在清醒

[SerializeField] private Script parentScript; 
[SerializeField] private Vector3 buttonPosition; 
void Awake() 
{ 
    parentScript.ButtonsContainer.transform.localPosition = buttonPosition; 
} 
+0

好的位置。我接受了您的建議,並在檢查畫布時發現畫布引起了問題(它將按鈕位置相對於塔的位置移動)。它也證明我必須選擇選項來縮放屏幕尺寸的畫布,而不是使用像素尺寸。這固定了位置問題。感謝您的建議,看看按鈕的父母。 –

+0

另外,你能解釋一下你提出的喚醒方法的目的是什麼嗎?它是電腦中已經內置的方法嗎?我剛剛在兩週前開始使用Unity C#,所以我是新手。 –

+0

@InfinityMax喚醒功能與啓動功能幾乎相同。這兩個函數之間的唯一區別就是它們觸發的順序。 Awake函數在啓動函數之前觸發,它很多用於初始化,如獲取組件,填充變量等。 希望這個解釋有助於:) – Mennolp