Как изменить размеры canvas unity

Create and manage UI Documents (UXML)

Create and manage UI Documents (UXML)

Runtime UI vs Editor Extension Authoring

Canvas

Canvas

Within the ViewportThe user’s visible area of an app on their screen.
See in Glossary
pane, you can find the Canvas, a floating re-sizable edit-time container that contains a live version of the UI(User Interface) Allows a user to interact with your application. Unity currently supports three UI systems. More info
See in Glossary
Document (UXML). If you can’t see it, select the Fit Canvas button in the Viewport toolbarA row of buttons and basic controls at the top of the Unity Editor that allows you to interact with the Editor in various ways (e.g. scaling, translation). More info
See in Glossary
to bring it into view. Any settings related to the Canvas, like its size, aren’t saved as part of the UI Document (UXML) but stored in a separate settings file for the next time you open the same UI Document (UXML).

Size the Canvas

To resize the Canvas inside the Viewport, drag the edges or corners. For exact sizing, click on the header of the Canvas through the InspectorA Unity window that displays information about the currently selected GameObject, asset or project settings, allowing you to inspect and edit the values. More info
See in Glossary
pane, where you will see fields for Canvas height and width. You can also lock the Canvas size to the size of the Unity Game Window using the Match Game View checkbox to align with a runtime UI environment:

CanvasSizeSettings

CanvasSizeSettings

Change Canvas background

You can change the Canvas background to make editing the UI in context easier. To change the background, select the Canvas in the Inspector pane. You can set it to be a solid color, a specific texture (a mock up from a UI Designer), or a live view from a CameraA component which creates an image of a particular viewpoint in your scene. The output is either drawn to the screen or captured as a texture. More info
See in Glossary
in an open Unity SceneA Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
See in Glossary
:

CanvasBackgroundSettings

CanvasBackgroundSettings

Create and manage UI Documents (UXML)

Runtime UI vs Editor Extension Authoring

Compressed builds and server configuration

In a WebGLA JavaScript API that renders 2D and 3D graphics in a web browser. The Unity WebGL build option allows Unity to publish content as JavaScript programs which use HTML5 technologies and the WebGL rendering API to run Unity content in a web browser. More info
See in Glossary
app, the canvas element is where the browser draws the graphics when rendering a game. This section describes how to configure the visible size of the WebGL canvas element, and the resolution that the game renders to.

To configure your WebGL Canvas size, you must consider the following types of canvas size:

Canvas Size elements Description
Canvas element CSS size This Document Object Model (DOM) specifies the visible area on the web page that the canvas takes up. You can configure the canvas size using HTML or JavaScript.
WebGL render target size This size specifies the pixelThe smallest unit in a computer image. Pixel size depends on your screen resolution. Pixel lighting is calculated at every screen pixel. More info
See in Glossary
resolution that the GPU renders your game to. This size can either be managed 1:1 in sync with the CSS size to provide pixel-perfect rendering, or it can be decoupled from the CSS size.

If the above two canvas size elements do not match, the browser will stretch the rendered WebGL output to fill the visible canvas area on the web page.

Decouple the render resolution

Decoupling the render resolution is useful when implementing downscaled low DPI (Dots per inch) rendering on high DPI display. This helps to not only conserve the GPU fill rate power but also helps if your application is sensitive to the rendering resolution. For example, if your application logic uses screen space pixel units, but for the application itself to work properly, it requires a specific resolution.

By default, Unity keeps the canvas element CSS size and the WebGL render target size in sync and provides 1:1 pixel perfect rendering. If the canvas CSS size is modified by the web page in JavaScript, Unity will automatically adjust the WebGL render target size to match it. By default, this match is done to implement high DPI rendering.

Override DPI scale

If you want to override the DPI scale, open the index.html file and add the Unity Instance configuration variable devicePixelRatio=<double>. For example, setting devicePixelRatio=1 on the WebGL site template page will force Unity to always apply low DPI rendering. See Using WebGL templates for an example.

Manually change the WebGL canvas render size

To manually configure the canvas size, you must first disable the automatic size synchronization. To do so, in the index.html file of the WebGL template, set the Unity Instance configuration variable to false: matchWebGLToCanvasSize=false.
When this is set, Unity leaves the render target size of the canvas as-is but you can always configure the size, if required.

For example, to change the css size of the canvas, edit the following text in the index.html file:

<div id="unity-container" style="position: absolute; width: 100%; height: 100%">
  <canvas id="unity-canvas" width={{{ WIDTH }}} height={{{ HEIGHT }}} style="width: 100%; height: 100%"></canvas>
</div>

Compressed builds and server configuration

Asked
4 years, 4 months ago

Viewed
19k times

I can not change canvas’ size when it’s in Screen Space — Overlay Mode; After some research I found that the size of a canvas is determined by your game’s screen size. The canvas just covers your screen. So I think I could change my camera’s size to change canvas’ size. But it does not work. Does anyone know how to set a specific size to a canvas?

asked Sep 25, 2018 at 16:36

jeep's user avatar

So may be my question should be how to change the screen size showed
in editor?

To change the screen size, go to the Game window (accessed by the menu «Window->General->Game»). At the top of the window will be a screen size menu (outlined in green, below) to change the screen size. When pressed, it will display the list of screen sizes that will be emulated. I say «emulated» instead of «displayed» because it is possible to have a screen size larger than the screen on which you are working. It is also possible to zoom into a screen. The «Scale» slider (to the right of the screen size menu) will allow you to scale up/down.

enter image description here

As a note, the list of screens and resolutions shown are related to the current build target (accessed by «File->Build Settings…»). For example, common iOS screen sizes are displayed in the list when the build target is iOS.

answered Sep 25, 2018 at 17:28

Topher's user avatar

TopherTopher

3961 silver badge8 bronze badges

3

answered Sep 25, 2018 at 16:42

Dave's user avatar

DaveDave

2,6242 gold badges19 silver badges37 bronze badges

3

26 октября 2015 г.
Canvas в Unity

Canvas в Unity

Привет! У меня нашлась свободная минутка, так что я подумал, что пришло время поделиться своим опытом построения интерфейсов в Unity. Поэтому, кому интересна эта тема — прошу под кат.

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

Содержание

Игровые интерфейсы

Что такое Canvas?

Варианты отображения Canvas

Размещение элементов в Canvas

Разработка под экраны любых размеров

Создание кастомного селектора

Игровые интерфейсы

В общем, UI в играх является полностью функциональным элементом, который только опосредованно влияет на геймплей. Его главная задача — донести до игрока необходимую информацию. В принципе, можно взять тот же Arial и отобразить им количество здоровья, патронов и счет (если речь идет о шутере). Да, это повлияет на эстетическую составляющую, а у особенно впечатлительных игроков может пойти кровь из глаз, но со своей задачей разработчик в таком случае справился: донес информацию до игрока.

Но это радикальные методы. Понятно, что самый лучший интерфейс — это тот, который игрок не замечает вплоть до момента, когда он ему понадобиться. И количество патронов на самом оружии, и уровень жизни, который отображается прямо на протагонисте (привет, Dead Space!) — все это на совести геймдизайнера. Мы же, как разработчики, должны воплощать эти прихоти в жизнь. Какие же возможности для создания интерфейсов есть в Unity?

Canvas для Unity UI — это область, внутри которой размещаются все элементы пользовательского интерфейса. То есть, когда мы создаем новый игровой объект, то Сanvas для него создается автоматически.

Начиная с версии 4.6, для работы с элементами пользовательского интерфейса используется новая версия Unity UI. Как и во время работы с обычными объектами, элементы HUD организовывают в иерархии, корневым элементом которых является объект с компонентом Canvas. При этом порядок в иерархии определяет порядок рендера: объекты, которые находятся в самом низу, отрисовываются последними и, соответственно, располагаются поверх остальных объектов.

Не имеет значения, какой тип приложения вы разрабатываете — как 3d, так и 2d игры используют одну и ту же логику работы с UI. То же самое касается платформы. Не имеет значение, это Web с HTML5 или игра для Android — достаточно будет описать одно полотно Canvas.

Варианты отображения Canvas

За то, где именно будет отображаться Unity UI Canvas (в пространстве экрана или игрового мира) отвечает параметр Render Mode, у которого есть три режима:

  1. Screen Space — Overlay — Canvas рендерится поверх всех элементов сцены. Если провести аналогию, то Canvas с элементами — это как окно с «наклейками» в поезде. Мир за окном может меняться (движение камеры в Unity), но «наклейки» остаются неизменными. Этот режим изменяет размер Canvas, когда меняется размер экрана. Он идеально подходит для статической информации вроде счета или инструментов управления.
  2. Screen Space — Camera — это то же окно, но вместо «наклеек» на нем расположена объемная аппликация (не имеет значения, это 2d или 3d игра). Также размещается поверх остальных элементов сцены, но при этом на элементы Canvas распространяются законы перспективы (при условии, что тип проекции камеры — Perspective). Этот режим идеально подходит для меню или других элементов, которые должны выглядеть объемными.
  3. World Space — режим, в котором Canvas выступает элементом сцены и может быть дочерним по отношению к другим элементам Game Object. Этот режим идеально подходит для облачек с текстом персонажей, индикаторов патронов в оружии и т. п.

Размещение элементов в Canvas

Для удобства проектирования каждый элемент UI отображается в виде прямоугольника. Для манипуляций с ними используется два главных компонента, Rect Tool и Rect Transform. Последний — это новый компонент, у которого кроме уже указанных полей есть особенное поле Anchors (Якоря).

Rect Transform

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

Звучит сложно, не так ли? Но если провести 10 минут в редакторе, то все сразу станет на свои места.

Creating button in Unity

Следует также сказать, что кроме якорей у Rect Transform есть также параметры Min, Preferred и Flexible Width и Height, которые можно переопределить с помощью компонента Layout Element, но обычно я его не использую.

Layout Element (Script)

Кстати, новая версия Unity UI Canvas позволяет использовать несколько приятных особенностей. Одна из них — это возможность полностью отключить весь UI для упрощения работы с самой сценой. За это отвечает пункт Layer в меню редактора.

Turning off UI

Сперва кажется, что функционала, который предоставляет вышеупомянутый компонент Rect Transform, должно хватать для всех возможных задач. Однако недавно, создавая кастомный селектор для Facebook, я столкнулся с необходимостью группировать элементы определенным образом.

При разработке под мобильные устройства (если вы разрабатываете не только под iOS) девелопер сталкивается с проблемой сегментированности, когда его игры могут запускать как на телефоне с 2-дюймовым экраном, так и на устройстве с диагональю 9 дюймов. И это я еще молчу про планшеты. Что делать в такой ситуации? У нас есть несколько вариантов.

Разработка под экраны любых размеров

Почему бы не использовать Anchors?

Первое, что приходит в голову — использовать якоря. Да, если у вас простые экраны без большого количества дочерних элементов, анимаций и остальных фич для пользователей, то почему бы и нет? Но, если вы используете такой тип верстки, следует помнить, что происходит изменение размера, а не визуальное растягивание (скейл) элементов. Поэтому в текстовых компонентах параметр Best fit становится активным, а во всех элементах появляется необходимость контролировать соотношение сторон и привязку к определенным частям экрана или другим элементам. Лично я так и начинал верстать — и решение нашлось (хотя оно и не очень элегантно, но зато работает).

В пакете UI есть компонент Aspect Ratio Fitter. Он работает достаточно просто: в зависимости от типа и изменений в размерах родительского элемента, данный компонент меняет размеры собственного Game Object, сохраняя соотношения сторон.

Aspect Ratio Fitter

Кстати, существует еще такой компонент, как Content Size Fitter, который работает «с другой стороны» — он изменяет размеры элемента в зависимости от его содержимого. Обычно он используется с дочерними Game Objects, которые содержат Text-компоненты, но также идеально работает с Layout Element и Grid Layout Group.

Content Size Fitter

Преимущества использования Canvas Scaler

Сейчас я использую Canvas Scaler, ведь в таком случае компонент добавляется автоматически во время создания Canvas. Преимущество по сравнению с предыдущим подходом состоит в том, что все дочерние элементы растягиваются, а не просто изменяют свой размер, а значит, сохранится размер шрифта во всех текстах, а элементы со смещением в несколько юнитов будут выглядеть одинаково на всех экранах.

У Canvas Scaler есть три режима работы:

  1. Constant Pixel Size — Game Object сохраняет свой размер в пикселях, игнорируя размеры экрана.
  2. Constant Physical Size — Game Object сохраняет свои физические размеры, игнорируя размеры экрана и его разрешение.
  3. Scale With Screen Size — Game Object растягивается вместе с экраном.

Последний элемент — мой любимый, поскольку позволяет не обращать много внимания на фрагментацию экранов, выбрав свое целевое разрешение, после чего Canvas оптимальным способом изменит собственные размеры. Поэтому предлагаю рассмотреть его подробнее.

Canvas Scaler

Как я уже упоминал, у этого режима есть свое целевое разрешение, в соответствии с которым Screen Match Mode будет изменять текущее полотно Canvas. Сам Match mode может принадлежать к одному из следующих типов:

  1. Match Width Or Height — растягивает область Canvas в зависимости от соотношения ширины и/или высоты к реальным на устройстве.
  2. Expand — растягивает область Canvas таким образом, чтобы помещалась большая сторона (размер Canvas никогда не будет меньше указанного).
  3. Shrink — растягивает область Canvas таким образом, чтобы помещалась меньшая сторона (размер Canvas никогда не будет больше указанного).

И хотя у каждого из режимов есть свои преимущества, но все же моим фаворитом остается Match Width Or Height. У этого режима есть еще одна полезная особенность — для него можно указать, какая из осей будет целевой, и с какой осью будет осуществляться сравнение (вся область Canvas будет увеличиваться в зависимости от ширины, высоты или обоих этих показателей).

Для этого используется параметр Match, в котором через переменную float [0;1] задается соотношение влияния сторон. Таким образом, 0 — изменения будут подгоняться по ширине, а 1 — по высоте. Если целевое соотношение сторон находится в горизонтальной ориентации, то когда Match = 0, мы получаем эффект Expand, а когда Match = 1 — Shrink (в вертикальной ориентации все будет наоборот, 0 будет давать Shrink, 1 — Expand).

Последний параметр Canvas Scaler — это Reference Pixels per Unit, который определяет, сколько пикселей будет в одном юните UI-элемента. Его значение по умолчанию равно 100 метрам. Он работает с Image-компонента, поэтому если у вас каждый метр — это 100 пикселей изображения и вы используете физику Unity, то вам подойдет это значение.

Создание кастомного селектора

Как я уже говорил, в моем случае задача состояла в написании кастомного селектора для Facebook. То есть предполагалось наличие динамически сформированного списка, из которого элементы могли удаляться «на ходу». И хотя работа с Facebook API — это отдельный разговор, предлагаю завершить обзор возможностей нового UI, а точнее — Layouts.

Layout

Как видим, некоторые компоненты мы уже рассмотрели. Поэтому давайте по очереди знакомиться с теми, про которые мы еще ничего не знаем.

Canvas Group

Canvas Group

Этот компонент легко и просто настраивать, но, тем не менее, он очень действенный. Позволяет оперировать свойствами всех дочерних элементов объекта. Полезен, когда требуется сделать определенную панель неактивной или запретить реагировать на взаимодействие с пользователем (через Raycast).

Для лучшего понимания достаточно будет создать 2 одинаковые панели с несколькими кнопками и чекбоксами, одна из которых будет содержать этот компонент, и просто поменять значения параметров.

И наконец-то самое интересное.

HorizontalLayoutGroup и VerticalLayoutGroup

Horizontal Layout Group

Два компонента размещают все дочерние компоненты горизонтально или вертикально друг за другом. Можно задать как отступы внутри корневого элемента, так и между дочерними элементами (padding и spacing). Кроме того, объекты можно отцентрировать относительно краев родительского элемента.

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

GridLayoutGroup

Grid Layout Group

Если вам нужно создать таблицу из однотипных элементов, то это просто дар богов! Как и у предыдущих элементов, у него есть поля padding и spacing, но при этом дальше нам требуется задать размеры дочернего элемента, в соответствие с которыми будут приводиться все объекты, добавленные к родительскому.

Дальше следует задать StartCorner, который будет определять позицию первого элемента, и StartAxis, который будет указывать на ось заполнения (по строкам или столбцам). Так, если выбрано Vertical, то элементы будут заполнять текущий столбец до тех пор, пока не достигнут границ родительского элемента, а затем перейдут на новый. С Horizontal все происходит наоборот — заполнение будет происходить по строкам. Задав, как и откуда добавлять элементы, логично будет указать их выравнивание.

Последний параметр — это Constraint, который определяет, будет ли у данной разметки определенное количество столбцов или строк или же этот показатель будет высчитываться, исходя и размеров родительского элемента. Стоит помнить, что в отличие от остальных компонентов разметки, GroupLayout переопределяет размеры дочерних элементов на Cell Size (его не интересуют показатели Min, Preferred и Flexible sizes).

Кроме того, существует возможность комбинировать GridLayoutGroup с ContantSizeFitter, однако у меня такой необходимости не было. Судя по официальной документации, с этим не должно возникать проблем.

Вот как выглядел конечный результат в моем случае:

Using custom selectors

Каждый элемент добавлялся динамически, инициализируясь из префаба элемента. Как видим, изменить размеры или позицию элемента мы не можем, поскольку эти значения определяются в GridLayoutGroup.

Grid Layout Group

Кстати, элемент был сверстан отдельно от панели, которая должна была удерживать этот объект и дальше. Все, что от меня требовалось — скопировать размеры элемента в CellSize компонента GroupLayout. А вот хардово забить размеры элемента я смог с помощью CanvasScaler, которому задал тип растягивания Match Width Or Height.

Вот и все, что касается возможностей нового UI. Эта статья — попытка систематизировать для себя полученный опыт, но если она пригодится и вам, то я буду искренне рад.

So Long, and Thanks for All the Fish.

Нужен MVP, разработка под iOS, Android или прототип приложения? Ознакомьтесь с нашим портфолио и сделайте заказ уже сегодня!

To change the screen size, go to the Game window (accessed by the menu “Window->General->Game”). At the top of the window will be a screen size menu (outlined in green, below) to change the screen size. When pressed, it will display the list of screen sizes that will be emulated.

Why is my canvas huge unity?

When the canvas is set to screen overlay, its size is set to the same resolution as the game window. So if your window is 1920×1080 pixels, the canvas will be 1920 units long and 1080 units high (hence why it is so massive).

How do I fit Unity games on different screen sizes?

If you go to the game tab (what pops up when you press play in the unity editor), you’ll see it has a device name, along with a resolution and aspect ratio. Changing this will let you see what it will look like at different aspect ratios.

How do you move a canvas in unity?

3 Answers. If you want to see the canvas fit inside your scene camera’s view, change the Canvas’s Render Mode to Screen Space – Camera; then drag the Main Camera onto the newly visible Render Camera field in the inspector.

How do I get canvas in unity?

Creating a new UI element, such as an Image using the menu GameObject > UI > Image, automatically creates a Canvas, if there isn’t already a Canvas in the scene. The UI element is created as a child to this Canvas. See in Glossary View.

How do I make my canvas smaller in unity?

To change the screen size, go to the Game window (accessed by the menu “Window->General->Game”). At the top of the window will be a screen size menu (outlined in green, below) to change the screen size. When pressed, it will display the list of screen sizes that will be emulated.

What is a panel in unity?

It might well be that “Panel” is just a shortcut creating a game object with an Image and a predefined Source Image. If there is a Panel component, please share a screenshot.

How do I make my game fit my screen?

In some games, Windowed Mode may appear in place of the Full screen option. You can also try manually adjusting your computer monitor. From your desktop, right-click and select Personalize. Select Display Settings. Adjust your screen resolution to 1024 x 768 and click Apply > OK. Try playing your game again.

How do I change the aspect ratio in unity?

In dropdown menu in Game window, you can select fixed resolution or fixed aspect ratio. If a ratio you want does not exist, you can add it.

How do I move the UI object in unity?

Move UI element from top to bottom of the screen using UnityEngine; public class MoveButton : MonoBehaviour { RectTransform canvas; RectTransform button; Vector3 startingPosition; public float speed; void Start() button = gameObject. GetComponent<RectTransform>();.

How do I move an image in unity?

The most common way of moving objects in Unity is to set transform. position to a Vector2 or a Vector3. This will change the position of the GameObject that holds the component from which the code is called from. But it is also possible to call transform.

Why do we need canvas in unity?

The Canvas is a Game Object with a Canvas component on it, and all UI elements must be children of such a Canvas. This makes it easy to position UI elements without needing to have the Game View visible at all times. Canvas uses the EventSystem object to help the Messaging System.

What is pixel perfect canvas unity?

Enabling pixelPerfect can make elements appear sharper and prevent blurriness. However, if many elements are scaled or rotated, or use subtle animated position or scaling, it may be advantageous to disable pixelPerfect, since the movement will be smoother without.

How do you make a canvas screen fit?

Set the Size with CSS to set the canvas’s width and height both to 100%. We also set the position to absolute and top , left , right , and bottom to 0 to make the canvas fill the screen. Also, we make the html and body elements fill the screen by setting the width and height to 100%.

What is canvas scaler in unity?

The Canvas Scaler component is used for controlling the overall scale and pixel density of UI elements in the Canvas. This scaling affects everything under the Canvas, including font sizes and image borders.

How do I use scroll view in unity?

How to use the Scroll view UI element in Unity? Add a “Vertical layout group” component to the content gameObject. It will automatically adjust the position of items inside the content object. Add a “Content size fitter” component to the same gameObject.

What is UI panel?

A ui. Panel is an upper-level UI container in which to arrange widgets. Panel has a ui. Panel. Layout object that controls how its widgets are arranged on the screen.

How do I adjust Screen size?

On a PC, click the Start menu followed by Preferences and Display Settings. You can also right click a blank screen to access the Settings menu. Depending on your operating system you will either choose Fit to Screen or Change size of text, apps and other items.

How do I resize a game window?

How to resize a window using Windows menus Press Alt + Spacebar to open the window’s menu. If the window is maximized, arrow down to Restore and press Enter . Press Alt + Spacebar again to open the window menu, arrow down to Size, and press Enter .

How do I fix full Screen games on Windows 10?

Go to the Options / Menu / Settings inside the game (not all games have this). Select Full-Screen On (or Off). This might resolve the issue. You will want to be sure that you have the first item set to 100% or whatever is recommended for your computer.

How do you change the screen size on Xbox One 2020?

How to adjust the screen size on your Xbox One with calibration Open your system settings. Navigate to the TV settings page. Select “Calibrate TV” after double-checking the resolution. Make sure to read the instructions before pressing “Next.” Adjust your screen until you see green lines on all sides.

Why is my Xbox one stuck on 640×480?

Try doing a hard reboot on your console by holding the power button on the front of it for 10 sec until it turns off then unplug it from the outlet for 30 seconds then plug back in and power back on. Hopefully this will resolve the issue.

How do I fix the screen size on my Xbox one?

1 Adjust Display Resolution Press the Xbox button on the controller. Go to the System tab. Then go to Settings. Then go to Display & sound. And then go to Video output. Select the TV resolution option. Set the option that best fits your display.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить размеры border css
  • Как изменить размеры body
  • Как изменить размерность списка python
  • Как изменить размерность массива numpy
  • Как изменить размер ячеек datagridview

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии