【问题标题】:Unity Listing below and moving if disabled下面的 Unity 列表并在禁用时移动
【发布时间】:2019-03-24 04:31:18
【问题描述】:
所以这是我的想法,我在 UI 中有几个游戏对象在彼此下方列出,所以想法如下
游戏对象1
游戏对象2
游戏对象3
游戏对象4
游戏对象5
所以我想禁用 GameObject4,但这样做时 GameObject5 将保持在其位置,我希望它自动向上移动到 GameObject4 的位置
像这样
游戏对象1
游戏对象2
游戏对象3
游戏对象5
而不是
游戏对象1
游戏对象2
GameObject3
游戏对象5
有人对如何做到这一点有想法吗?
【问题讨论】:
标签:
c#
user-interface
unity3d
editor
【解决方案1】:
尝试在一个数组中创建一个包含这些对象(我认为您的意思是 UI 元素)的数组,将它们的初始位置存储在另一个数组中,然后循环以将它们从堆栈中弹出。
尝试摆弄它以满足您的需求:
public GameObject[] buttons;
float[] buttonPos;
private void Start()
{
buttonPos = new float[buttons.Length];
for (int i = 0; i < buttons.Length; i++)
{
buttonPos[i] = buttons[i].transform.position.y;
print(buttonPos[i]);
}
}
private void Update()
{
if (Input.GetKeyDown("space"))
{
DestroyButton(1);
}
}
void DestroyButton(int i)
{
Destroy(buttons[i]);
Stack(i);
}
void Stack(int i)
{
for ( int j= i; j < buttons.Length; j++)
{
if(j != buttons.Length-1)
buttons[j + 1].transform.position = new Vector3(buttons[j + 1].transform.position.x, buttonPos[j], buttons[j + 1].transform.position.z);
}
}
【解决方案2】:
您的问题非常不清楚和不完整;甚至(缺少的)换行符也令人困惑......
由于它是一个 UI 并且您的问题包含空格和非空格,我猜您的游戏对象在 VerticalLayoutGroup 中?牵强,如果他们是,为您没有在您的问题中说明这一点而感到羞耻。
如果您希望元素被禁用而不使下部元素“向上移动”
如果我正确理解了您的问题,解决方案是将您的内容作为其他内容的子项,如下所示:
编辑:
正如@comphonia 正确建议的那样,最好以编程方式制作这个菜单,每个按钮都是它永远不会禁用的父游戏对象的子按钮,并将它们放入列表或数组中,以便您可以单独禁用它们或重新启用它们