【问题标题】: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 正确建议的那样,最好以编程方式制作这个菜单,每个按钮都是它永远不会禁用的父游戏对象的子按钮,并将它们放入列表或数组中,以便您可以单独禁用它们或重新启用它们

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-08
        • 1970-01-01
        • 2021-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多