Одиничний інтерфейс інтерфейсу, який заповнює ширину АБО висоту


11

Я намагаюся створити дошку з такими вимогами:

  • Він повинен бути квадратним.
  • Він повинен відповідати доступній ширині АБО висоті.
  • Він повинен бути в центрі полотна.
  • МОЖЕ бути загорнутий у скільки завгодно додаткових проміжних полотен.

Я граю з якорями, але не знаходжу жодної комбінації для цього. Єдине рішення, на яке я можу подумати, - це сценарій якогось "OnResize" контейнера та встановлення розміру плати програмно.

Це оригінальний макет. (1) є BoardCanvas. (2) є Радою.

Оригінальний макет

Я хочу, щоб якщо екран став вище, квадрат зростає, але все одно є квадратним:

введіть тут опис зображення

Або зменшує:

введіть тут опис зображення

Але, хоча ці попередні приклади притискаються до верхнього та нижнього країв, я також хочу, що якщо вертикальний простір стає вище, ніж наявна ширина, то квадрат обмежує його розмір залежно від лівої та правої меж:

введіть тут опис зображення

Q1: Чи існує спосіб зробити це за допомогою якорів / опор? Для мене нормально створювати проміжні полотна між BoardCanvas та самою дошкою, якщо це працює.

Q2: Якщо так, то де я повинен розмістити якір? Чи потрібні проміжні об'єкти?

Q3: Якщо ні, чи сценарій рішення? Чи є на полотні OnResize для обробки? Я не можу побачити в списку жодної зміни розміру, але, можливо, я не знаю, де його шукати. Я відчуваю, що тестування його на кожному кадрі здається трохи надмірним, керований подією здається кращим.

Дякую!

Відповіді:


13

Нарешті я знайшов спосіб це зробити (протестовано в v5.0.0) таким чином:

  • Для перевірки орієнтації не потрібен код або умовні умови.
  • Не зломлює ваги і не потребує довідкової роздільної здатності.

У відеоуроках користувальницького інтерфейсу значна частина відсутня, хоча і добре зафіксована в текстовій документації: Система "автоматичні розкладки".

Автоматичні макети - це механізми, виконані з "макетів" та "контролерів компонування". Контролери макета - це компоненти, які можна приєднати до ігрового об'єкта інтерфейсу користувача. Контролери можуть змінювати розміри Rect Transforms інтелектуально.

Деякі контролери можуть змінити розмір об'єкта, до якого застосовується компонент, тоді як інші контролери можуть змінити розмір дітей цього об'єкта.

Є кілька вбудованих контролерів. Одним з таких є Aspect Ratio Fitter.

Спочатку я вибираю свою Boardпанель і додаю новий Aspect Ratio Fitterкомпонент:

введіть тут опис зображення

Aspect Ratio Fitter, Здається, спрямована на «підтримку» хотів співвідношення сторін об'єкта. Для цього або об'єкт можна встановити так, щоб "обернути" навколо дочірнього об'єкта (підтримуючи співвідношення сторін), або його можна встановити для розширення та розміщення контейнера (зберігаючи співвідношення сторін).

Потім я вибираю Fit In Parentваріант і вказую, що я хочу ідеальний квадрат, встановивши бажане співвідношення сторін на 1:

введіть тут опис зображення

введіть тут опис зображення

Це дає дуже подібний макет, ніж той, який я хотів, але мені не довелося розповідати платі про її розміри. Але все-таки він знає, що він повинен бути квадратним, як зображено:

введіть тут опис зображення

Якщо я стискаю вертикально або розширюю, квадрат слідує за батьківським, зберігаючи співвідношення сторін:

введіть тут опис зображення

введіть тут опис зображення

Магічно, коли зміна знижена за рахунок зменшення ширини, не існує сценарію, який можна приєднати, і немає властивості змінювати, як "Фільтр аспектів" робить це для нас автоматично:

введіть тут опис зображення

Нарешті, як я хотів трохи запасу там, я просто розміщую перетворювальну пряму трансформацію, яка виступає в якості розпірки і переміщуємо перехід Boardз BoardCanvasв MarginCanvas:

введіть тут опис зображення


Ах, дивовижно, це виглядає як відмінне рішення. Радий, що ти знайшов це, дякую за те, що поділився!
Кріс Макфарланд

3

Це можливо, але, мабуть, лише невеликий рядок коду або два для визначення того, чи є екран пейзажним чи портретним, та змінювати пара значень.

На полотні потрібно зробити "Режим користувальницької шкали" "Режим користувальницького масштабу" "Масштаб з розміром екрана", а режим "Збіг екрана" - "Ширина збігу або Висота":

введіть тут опис зображення

Якщо припустимо використовувати стандартну роздільну здатність 800x600 за умовчанням, і якщо припустимо, що область перегляду екрана є пейзажною (наприклад Screen.width, більше, ніж Screen.height), повзунок «Матч» повинен бути встановлений у напрямку до висоти як 1.

Потім ви захочете зображення на полотні, використовуючи попередньо встановлений середній / центральний якір. Ви також хочете, щоб ширина та висота зображення відповідали значенню Y значення Вашого Canvas Scaler.

введіть тут опис зображення

Потім ви можете змінити розмір вікна перегляду камери і побачити, що зображення зберігає свою форму, розтягуючи свою висоту, щоб відповідати висоті огляду:

введіть тут опис зображення


Якщо екран зображений у портретному режимі - і це, ймовірно, вам потрібно буде ввести код, щоб перевірити та / або змінити за потребою - вам потрібно встановити значення відповідності Scaler 0та змінити висоту та ширину зображення, щоб відповідати еталонній роздільній здатності Значення X. (на малюнках нижче - і ширина, і висота зображення 800)


Якщо ви намагаєтесь помістити все менше зображення всередину, ви можете "змінити" масштаб зображення, регулюючи його ширину та висоту відповідно до значення X або Y еталонної роздільної здатності (залежно від пейзажу чи портрета). Так, наприклад, я зробив синій квадрат, який використовує половину значення X Reference Reference Resolutions (оскільки вікно перегляду портретно), і він масштабується і добре зменшується:

введіть тут опис зображення

І далі, якщо ви хотіли шахматну дошку чи щось подібне, положення X і Y кожного зображення, а також висота і ширина можуть базуватися на відсотках дозволу Canvas Scaler, щоб робити все, що завгодно:

введіть тут опис зображення


1
Дякую Крісу за вашу детальну відповідь. Нарешті я знайшов рішення, яке не потребує жодного рядка коду, щоб перевірити орієнтацію, і не зламає масштаби і не використовує довідкове дозвіл. Я збираюся розмістити свою власну відповідь, але я не хотів пройти, не дякуючи вашим зусиллям та ілюстрацією.
Хаві Монтеро
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.