2016-07-26 58 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