|
2D/GUI Вопросы на тему 2D графики и интерфейсов |
09.11.2015, 06:05
|
#1
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Проделки позиции элемента GUI
// Префаб — это кнопка, сделанная через Create -> Button
GameObject attackButton = (GameObject)GameObject.Instantiate(Resources.Load("Prefabs/GUI/DummySkills/Attack", typeof(GameObject)));
// Аттачу её к канвасу
attackButton.transform.SetParent(GameObject.Find("UI").transform);
// Указываю позицию по Y -500
attackButton.transform.position = new Vector3(500,-500, -500);
// Z чисто для проверки вставил
...а оказывается она по X = 500, Y = -1025, в чём дело?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
09.11.2015, 07:10
|
#2
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Проделки позиции элемента GUI
а чего не transform.localPosition? В целом - пивот твоего парента не в нуле координат наверное. В инспекторе отображается localPosition.
Вообще с позиционированием элементов UI из кода есть свои заморочки, стараюсь этого не делать. Обычно все координаты заранее в префабе прописаны. Делаю просто
var uiElement = Instantiate(prefab); uiElement.GetComponent<RectTransform>().SetParnet(parentTransform, false);
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
09.11.2015, 08:47
|
#3
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Проделки позиции элемента GUI
Надо использовать
Так же может быть, что у твоего элемента измененный anchor и соответственно у него пивот будет не в центре. При этом если не ошибаюсь в диспетчере будет показывать координаты как будто пивот стоит в центре твоего элемента.
|
(Offline)
|
|
09.11.2015, 21:05
|
#4
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Проделки позиции элемента GUI
Сообщение от pax
а чего не transform.localPosition? В целом - пивот твоего парента не в нуле координат наверное. В инспекторе отображается localPosition.
Вообще с позиционированием элементов UI из кода есть свои заморочки, стараюсь этого не делать. Обычно все координаты заранее в префабе прописаны. Делаю просто
var uiElement = Instantiate(prefab);
uiElement.GetComponent<RectTransform>().SetParnet(parentTransform, false);
|
Ну у меня не получится заранее в префабе всё прописать.
Дело в том что стоит задача: над каждым объектом из списка на гуе поместить кнопку. Соответственно координаты приходится рассчитывать рантайм.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
09.11.2015, 22:34
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Проделки позиции элемента GUI
Если объекты одинаковые, то можно:
1. Разместить кнопку над одним из них как чайлд объекта (поставить anchor к верхней грани как требуется)
2. Сделать кнопку префабом
3. Размещать над всеми остальными моим способом (приводил выше), делая для кнопки парентом нужный объект.
|
(Offline)
|
|
09.11.2015, 23:39
|
#6
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Проделки позиции элемента GUI
Объекты имеется в виду — в 3D пространстве, это что-то меняет?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
10.11.2015, 04:39
|
#7
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Проделки позиции элемента GUI
Проверил с localPosition — кнопка перемещается в другое место, но всё равно не туда, куда сказано.
Даже, можно сказать, дела ещё хуже: раньше хотя бы X становился какой надо, теперь вообще рандомное чисто шо в X шо в Y.
Пойду ещё потыкаю, если найду причину отпишусь.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
10.11.2015, 05:04
|
#8
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Проделки позиции элемента GUI
Итак, господа!
Указывать transform.position, как оказалось, это совсем не про то, получается совсем не то, что надо.
Чтобы добиться результата, надо указывать anchoredPosition, который есть у компонента RectTransform. Он, хоть и наследник Transform, но просто по .transform до него не достучаться, нужно "по матчасти" вызывать его через GetComponent.
Собственно решение:
// Инстансим UI элемент GameObject attackButton = (GameObject)GameObject.Instantiate(Resources.Load("Prefabs/GUI/DummySkills/Attack", typeof(GameObject))); // Получаем его компонент RectTransform RectTransform attackTransform = attackButton.GetComponent<RectTransform>();
// Задаём парента attackTransform.SetParent(GameObject.Find("UI").transform); // Задаём позицию attackTransform.anchoredPosition = new Vector2(500,-200);
// Теперь позиция задаётся корректно!
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
|
|
10.11.2015, 07:30
|
#9
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Проделки позиции элемента GUI
Кхм... про 3d пространство надо было сразу написать. С 3D объектами может быть по разному, т.к. канвас бывает и WorldSpace, привязанный непосредственно к 3d объекту.
Т.е. сейчас ты проецируешь координаты 3D объекта на экран и потом указываешь их как позицию?
|
(Offline)
|
|
10.11.2015, 07:46
|
#10
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Проделки позиции элемента GUI
Да, через неё.
А есть способ лучше?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
10.11.2015, 08:12
|
#11
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Проделки позиции элемента GUI
не знаю как вы, а я делаю все просто:
Vector3 pos = RectTransformUtility.WorldToScreenPoint (Camera.main, target.position ); //pos.z=-1f;
transform.position = pos;
(не знаю зачем эта обертка, вызывается все равно метод камеры, только сейчас референс провел и помотрел как и что)
Canvas в overlay стоит, иначе пляски с бубном начинаются.
А если канва в WorldSpace, то там объекты находятся в мировом пространстве и нужно сделать сначала WorldToScreen а потом ScreenToWorld, но уже с z-глубиной канваса, иначе все будет смещаться . (не знаю другого способа трансформировать координаты относительно матрицы вида камеры)
Тут еще смещение может быть из-за того, что точка объекта выше самого объекта. Как у меня тут:
Трансформ-бокс стоит строго по центру, но анхор у флажка выдвинут по z вперед, что бы относительно нуля стоял, а так как камера перспективная - получается такое смещение.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо RegIon за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:02.
|