Как исправить метод onGUI на панели - PullRequest
1 голос
/ 05 июля 2019

Я хочу исправить метод OnGUI внутри скрипта на панели. Что я хочу сделать, так это то, что в свободном аспекте, когда я изменяю размер игрового экрана, мой текст, написанный с помощью onGUI, изменяется в зависимости от размера игрового экрана.

    public HumanBodyVisualizer bodyVisualizer;

    public GameObject text;

    Vector2 scrollPosition = Vector2.zero;

    float scrollPosition_y = 30;


 private void OnGUI()
    {

        //Debug.Log(text.transform.position.y);

        int subPartsSpacing = 0;
        float spacing = 30;
        float x = 7 + spacing;
        float y = text.transform.position.y;

        HumanBodyPart mainBodyPart = bodyVisualizer.BodyData.Body.SubParts[0];
        List<HumanBodyPart> nextPartsToRender = new List<HumanBodyPart>(new HumanBodyPart[] { mainBodyPart });
        List<HumanBodyPart> allPartsToRender = new List<HumanBodyPart>(new HumanBodyPart[] { mainBodyPart });

        scrollPosition = GUI.BeginScrollView(new Rect(7, 68, 236, 426), scrollPosition, new Rect(7, 68, 500, scrollPosition_y));

        GUI.backgroundColor = Color.clear;

        while (nextPartsToRender.Count > 0)
        {

            HumanBodyPart currentPart = nextPartsToRender[0];
            nextPartsToRender.RemoveAt(0);

            if(GUI.Button(new Rect(currentPart.DrawDepth * spacing + x + subPartsSpacing, y, 200, 20), currentPart.EnglishTitle))
            {

                    HumanBodyVisualizer.ShowMode showModeFullBody = HumanBodyVisualizer.ShowMode.Invisible;
                    bodyVisualizer.ShowBody(showModeFullBody);

                    List<HumanBodyPart> AllSubPartsAndRoot = new List<HumanBodyPart>();
                    AllSubPartsAndRoot.Insert(0, currentPart);
                    allSubPartsOfClickButton(currentPart, AllSubPartsAndRoot, 1);
                    HumanBodyVisualizer.ShowMode showModeCurrentPart = HumanBodyVisualizer.ShowMode.LowTransparent;
                    //bodyVisualizer.ShowBodyPart(showModeCurrentPart, currentPart);
                    for (int i = 0; i < AllSubPartsAndRoot.Count; i++)
                    {
                        bodyVisualizer.ShowBodyPart(showModeCurrentPart,AllSubPartsAndRoot[i]);
                    }
                    /*
                    List<String> modelList = currentPart.ModelList;
                    for(int i = 0; i < modelList.Count; i++)
                    {
                        Debug.Log(modelList[i]);   
                    }
                    */

            }

            if (currentPart.SubParts.Count != 0)
            {

                if (GUI.Button(new Rect(x - spacing + currentPart.DrawDepth * spacing + subPartsSpacing, y, 20, 20), "+"))
                {
                    if (!currentPart.IsExpanded)
                    {
                        currentPart.IsExpanded = true;
                        subPartsSpacing += 20;
                    }
                    else
                        currentPart.IsExpanded = false;
                }
                if (currentPart.IsExpanded)
                {
                    nextPartsToRender.InsertRange(0, currentPart.SubParts);
                    allPartsToRender.InsertRange(allPartsToRender.Count - 1, currentPart.SubParts);
                    scrollPosition_y = allPartsToRender.Count * spacing ;
                }
            }
            y += spacing;
        }
        // End the scroll view that we began above.
        GUI.EndScrollView();

    }

private void allSubPartsOfClickButton(HumanBodyPart root, List<HumanBodyPart> AllSubparts,int a)
    {
        AllSubparts.Insert(a, root);
        a++;
        for(int i = 0; i < root.SubParts.Count; i++)
        {
            allSubPartsOfClickButton(root.SubParts[i], AllSubparts, a);
        }

    }

Когда я так бегаю, даже когда я меняю размер игрового экрана, текст OnGUI (кнопки, метки и вид прокрутки) остается постоянным на экране.

Я не могу использовать Unity UI. Я должен справиться с этой проблемой с помощью onGUI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...