Как прикрепить объект Unity 2d к краю экрана? - PullRequest
0 голосов
/ 03 апреля 2020

Я делаю игру в Unity, где объекты появляются в активном состоянии в виде типа сетки. Я хочу, чтобы первый объект появлялся на левом краю экрана, а остальные следовали. И у меня это работает более или менее правильно, когда я тестирую встроенный игровой тестер Unity. Я даже пробую это в разных разрешениях и все равно выглядит нормально. Однако, когда я собираю проект и затем тестирую его, все объекты находятся вне камеры, и это не похоже на предварительную сборку. Я перепробовал много разных предложений, которые я нашел в Google, и они, похоже, не лучше Я создаю экземпляр первого объекта, чтобы сначала получить значение X края экрана, используя int ix = -(Camera.main.scaledPixelWidth / 2) И тогда я добавлю половину ширины объекта, используя

var renderer = clone.GetComponent<Renderer>();
float width = renderer.bounds.size.x / 2f;
ix += (int) width;

Я также пытался использовать значения screen.width и Camera.main.PixelWidth, и все они одинаковы ... Они хорошо выглядят во всех аспектах rat ios на встроенном предварительный просмотр игры для Unity, но когда я делаю сборку для Windows или WebGL, объекты запускаются за пределами экрана, и только последние несколько отображаются на экране. Есть ли у кого-нибудь предложения о том, как заставить объекты отображаться ровно на краю, независимо от разрешения? Я понимаю, что это может работать лучше, если объекты размечены вручную, но объекты необходимо визуализировать в начале уровня, поскольку идея состоит в том, чтобы повторно использовать одну сцену и загрузить ресурсы в зависимости от проанализированного файла xml, так как это игра-головоломка, и я хочу, чтобы пользователи тоже могли создавать свои собственные головоломки.

1 Ответ

0 голосов
/ 03 апреля 2020

Поскольку вы уже говорите об элементах пользовательского интерфейса внутри Canvas all , вам нужно правильно установить точки привязки и точки разворота.

Либо сделайте это уже в своем префабе

enter image description here

или позже с помощью кода, например

var rectTransform = clone.GetComponent<RectTransform>();
var anchorsVector = new Vector2(0,0.5f);
rectTransform.pivot = anchorsVector;
rectTransform.anchorMin = anchorsVector;
rectTransform.acnhorMax = anchorsVector;

Теперь все, что вам нужно сделать, это установить этот объект в положение x=0 «прикрепить» его к левому краю. С этой текущей настройкой y=0 означает центрирование по вертикали. Конечно, вы можете изменить это в соответствии с вашими потребностями.

rectTransform.anchoredPosition = new Vector2(0, 0);

Как в этой маленькой демонстрации

public class Example : MonoBehaviour
{
    [ContextMenu("Test")]
    private void Test()
    {
        var rectTransform = GetComponent<RectTransform>();
        var anchorsVector = new Vector2(0,0.5f);
        rectTransform.pivot = anchorsVector;
        rectTransform.anchorMin = anchorsVector;
        rectTransform.anchorMax = anchorsVector;

        rectTransform.anchoredPosition = new Vector2(0, 0);
    }
}

enter image description here

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