对游戏对象进行排序并在层次结构中设置其SiblingIndex

时间:2018-10-19 14:16:13

标签: c# unity3d

我有一个好友系统,并想通过Users Worldrank(通过PlayFab)对其进行排序。

我想要最好的在顶部,最坏的在底部。

我使用以下脚本尝试了

private void sortfriendlist()
    {
        GameObject[] Friendcolumns = GameObject.FindGameObjectsWithTag("Friendcolumn");

        for (int i = 0; i < Friendcolumns.Length; i++)
        {
            //If ranked
            if (Friendcolumns[i].name.Substring(0, 1) != "F")
            {
                //Set Sibling (Rank)
                int rank = int.Parse(Friendcolumns[i].name.Substring(0, 1));
                Friendcolumns[i].transform.SetSiblingIndex(rank);

            }
            //If unranked
            else
            {
                Friendswithoutrank[i] = Friendcolumns[i];
            }
        }

        Debug.Log(Friendswithoutrank.Length + " Friends without Rank");

        for(int i = 0; i < Friendswithoutrank.Length; i++)
        {
            Debug.Log(Friendswithoutrank[i].name + " has no Rank");
            Friendcolumns[i].transform.SetAsLastSibling();
        }
    }

但是这不起作用,正如您在此处看到的

Friendlist ingame

首先,我获得了所有好友并将其存储在数组中。之后,我通过检查GameObjects名称开头是否存在“ F”来检查玩家是否具有等级(无等级的朋友在Gameobject名称之前没有Ranknumber,因此名称以“ F”开头)。比我获得好友等级,并将SiblingIndex设置为等级。因此,通常应该按照我的想法对它进行排序。但是这个想法似乎行不通。

如果您有任何解决方法或将其改进的想法,请告诉我!

1 个答案:

答案 0 :(得分:0)

使用Linq进行排序实际上可以容易得多(另请参见this thread):

library(shiny)

ui <- fluidPage(

  selectizeInput(inputId='select',
                 label='Select something',
                 multiple=TRUE,
                 choices=letters[1:3])
)

server <- function(input, output){

  observe({
    print(input$select)
  })
}

shinyApp(ui=ui, server=server)