Расстояния между элементами интерфейса по коду зависят от размера экрана.Обходной путь? - PullRequest
0 голосов
/ 13 февраля 2019

У меня проблемы с позиционированием и перемещением элементов на холсте Unity по коду, поскольку абсолютные расстояния, как правило, зависят от размера экрана.Итак, если я хочу сделать определенную точку на экране доступной для кода (т.е. переместить определенный элемент пользовательского интерфейса в эту точку), я использую этот обходной путь:

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

2) Затем, чтобы переместить элемент, я использую этот код (примерно):

Vector2 pos = auxiliaryPanel.GetComponent<RectTrasform>().localPosition;
element.GetComponent<RectTrasform>().localPosition = pos;

Проблема в том, что я хочу закрыть несколько позиций на экране.Тогда мне просто нужно несколько вспомогательных панелей :) Есть идеи для более чистого или более удобного решения?

1 Ответ

0 голосов
/ 13 февраля 2019

Вы можете рассмотреть возможность использования позиции относительно границ родительского элемента.

Я написал следующее MonoBehaviour, чтобы проиллюстрировать идею:

using UnityEngine;

// component that positions the element at relative position within it's parent
public class PositionElement : MonoBehaviour
{
    // relative position. (0, 0) is the parents lower-left corner and (1, 1) is parents top-right
    public Vector2 relativePosition = new Vector2(0.5f, 0.5f);

    private void Update()
    {
        // get the parent's RectTransform
        RectTransform parent = (RectTransform)transform.parent;

        // position the element relative the parents lower left corner
        transform.localPosition = Vector2.Scale(parent.rect.size, relativePosition - parent.pivot);
    }
}

enter image description here

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