Сетка кнопок в Unity - ограничения кнопок растягиваются за пределы их визуальных эффектов, захватывая клики, предназначенные для других кнопок

Я использую единый интерфейс в первый раз и пытаюсь создать меню выбора уровня, как Angry Birds.

Я успешно создал меню выбора динамического уровня. Все было хорошо в инспекторе, но когда я его строю и запускаю, происходит что-то странное: когда я нажимаю на первую кнопку первой строки, вместо этой кнопки нажимается последняя кнопка этой строки.

Я искал и обнаружил, что изображение не растягивается (из-за сохранения свойства aspect aspect), но границы растягивались с разрешением, поэтому границы накладывались друг на друга и нажимали на неправильную кнопку.

  1. Существует панель, которая является дочерней частью объекта игры canvas.
  2. Кнопки являются дочерними элементами панели gameObject.
  3. Ярлыки панели настроены на растягивание холста.
  4. Ярлыки кнопок настроены на растягивание панели.

Вот код для динамического создания меню.

public class UITest : MonoBehaviour 
{

    public Button button;
    public RectTransform parent;

    void Start()
    {
        SetupButtons();
    }


    void SetupButtons()
    {
        float x = -155;
        float y = 55;

        for(int i=1; i<15; i++)
        {
            var I = i;
            var btn = Instantiate(button) as Button;
            var btnRect = btn.GetComponent<RectTransform>();

            float width = btnRect.rect.width/5;
            float height = btnRect.rect.height/5;

            btn.transform.SetParent(parent, false);
            btnRect.anchoredPosition = new Vector2(x, y);
            btn.onClick.AddListener(() => Temp(btn, I));

            if(i%5 == 0)
            {
                y += (height);
                x = -155f;
            }

            else
            {
                x += -width;
            }

            //Debug.Log(width +", " + height);
        }
    }

    void Temp(Button btn, int i)
    {
        //Debug.Log("Clicked: " + i);
        Debug.Log(btn.GetComponent<RectTransform>().anchoredPosition + " " + btn.GetComponent<RectTransform>().rect);
    }
}

Вот несколько скриншотов, чтобы лучше понять проблему.

Надеюсь, вы, ребята, поняли проблему, пожалуйста, помогите мне решить проблему.

 введите описание изображения здесь>> </a>
<a href=введите описание изображения здесь

4 голоса | спросил Daniyal Azram 10 MarpmThu, 10 Mar 2016 20:29:07 +03002016-03-10T20:29:07+03:0008 2016, 20:29:07

2 ответа


1
transform.anchorMin = new Vector2(0f, 0f);
transform.anchorMax = new Vector2(1f, 1f);
transform.pivot = new Vector2(.5f, .5f);

http://answers.unity3d.com/questions/1007886/how-to-set-the-new-unity-ui-rect-transform-anchor.html

ответил Rakka Rage 11 MaramFri, 11 Mar 2016 03:37:06 +03002016-03-11T03:37:06+03:0003 2016, 03:37:06
0

Спасибо всем за ответ, но я сам решил проблему. Если кто-то еще сталкивается с этой проблемой, я просто установил опорные точки в середине панели, и моя проблема исчезла.

ответил Daniyal Azram 11 MarpmFri, 11 Mar 2016 15:45:43 +03002016-03-11T15:45:43+03:0003 2016, 15:45:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132