Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Маштабирование сцены под разные экраны Unity3D

Маштабирование сцены под разные экраны Unity3D

Поделиться

Страницы: 1 2 Следующая

bretbasПостоялецwww19 авг. 201712:09#0
Ребят, я не могу понять, как правильно организовать маштабирование сцены в Unity3D под все экраны? Уже облазил весь гугл, но так и не нашел конкретного решения этой проблемы.
Я сделал скрипт, который вычисляет значение size у компонента Camera, которое должно быть равное половине высоты экрана в пикселях. Все круто, обзор камеры увеличивается/уменьшается в зависимости от размеров экрана. А как быть со спрайтами то? Мне придется каждый спрайт маштабировать(scale) чтоли в зависимости от экрана? Или как-то это по другому делается?
KumoKairoПостоялецwww19 авг. 201716:59#1
В Unity по умолчанию меняется только ширина экрана. Высота считается неизменной (в юнитах расстояния). То есть если есть ортографическая камера с размером 2, то это значит что высота экрана равна 4 всегда и везде, при любом отношении сторон. То есть на более широких экранах мы видим большее количество объектов на сцене. Чаще всего такой вариант прокатывает - для всяких топдаун шутеров и прочего просто широта обзора становится шире. А там где ширина поля должна быть фиксированная обычно делают с расчётом на самый квадратный аспект экрана (4 к 3 на айпаде), а для более широких (или высоких) дорисовывают задник чтобы не было пустоты.
Но иногда приходится "переворачивать" эту логику константной высоты и делать константную ширину. Тогда как раз динамически вычисляем size у камеры в зависимости от референсного значения ширины и выставление где-нибудь при старте игры (если не будет возможности менять размер окошка). В этом случае побочным эффектом изменения ортографического размера камеры будет увеличение или уменьшение размеров спрайтов по высоте (чего не происходит в стандартной модели с константным размером по высоте). На спрайты ничего вешать не надо, они рисуются через камеру и изменение size у камеры имеет эффект увеличения или уменьшение размеров спрайтов
bretbasПостоялецwww19 авг. 201720:09#2
KumoKairo, допустим у меня есть сцена, где камера будет неподвижна, и мне нужно видеть определенный геймплей в этой камере. И чтобы этот геймплей умещался на всех экранах. Также имеется фон, который как я понял, будет обрезаться, если ширина экрана становится меньше, чем ширина фона...
А там где ширина поля должна быть фиксированная обычно делают с расчётом на самый квадратный аспект экрана (4 к 3 на айпаде), а для более широких (или высоких) дорисовывают задник чтобы не было пустоты.

Тоесть делаем под самый более менее квадратный экран, и следовательно на всех более широких экранах будет по любому все что нужно видно. Вы это имели ввиду? А что, если нужно персонажа четко в левой стороне экрана устанавливать? Или какое-нибудь GUI, которое отображается по краям вверху? Если мы все это расставим для экрана 4 к 3, то при более широком экране, все эти элементы(GUI, персонаж) будут уже не у краев....

LucasitoПостоялецwww19 авг. 201720:21#3
По поводу GUI это отдельная история, посмотри хотя бы туториалы на сайте юнити. Всё гораздо проще, чем ты думаешь
bretbasПостоялецwww19 авг. 201720:36#4
Lucasito,
По поводу GUI это отдельная история, посмотри хотя бы туториалы на сайте юнити

Ну я смотрел разные уроки по Unity3d с офф сайта, но про GUI ничего не смотрел. Ну я понял про что Вы имели ввиду в понимании "проще". Там якоря(привязки всякие) есть, да?:)

Ну хорошо, с GUI опустим. А что по поводу персонажа, который должен в правой стороне экрана стоять?:)

LucasitoПостоялецwww19 авг. 201720:44#5
Там и якоря и масштабы, различные варианты. Выбираешь что тебе удобнее в данном конкретном случае. По поводу персонажа, я так понимаю он не спрайт, который можно так же как элемент GUI вывести, можно тоже несколькими способами выводить. Можешь тупо математикой вычислить, а можешь из координат гуя перевести в мировые и выводить в этом месте всё что пожелаешь
bretbasПостоялецwww19 авг. 201721:18#6
Lucasito,
По поводу персонажа, я так понимаю он не спрайт

спрайт:)
Можешь тупо математикой вычислить, а можешь из координат гуя перевести в мировые и выводить в этом месте всё что пожелаешь

Да я знаю, что можно разными способами решить задачу. Но не хотелось бы, чтобы это были какие-то костыли. Более проще и понятнее.

Да, и еще хотел спросить несколько вопросов по поводу спрайтов для мобильных платформ:
1. Нужно ли их маштабировать, или лучше в фотошопе подогнать все спрайты между собой, как хотелось бы их видеть, и потом уже выводить в реальном размере с маштабом (1, 1, 1)?
2. Какого разрешения должны быть спрайты, чтобы не было искажения в качестве и всяких артефактов при выводе их на разных экранах? Нужно ли под определенные стандарты экранов делать несколько прототипов спрайтов с разным разрешением? Короче вопрос общего характера, по поводу правильного вывода спрайтов на мобильных платформах.

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

LucasitoПостоялецwww19 авг. 201721:38#7
Правильного нет, есть оптимальный для конкретного проекта. Самый простой способ - рисуешь и нарезаешь спрайты под самое большое разрешение, юнити потом сама его уменьшит под девайс. Если будут проблемы, нужно будет настроить антиальясинг и тому подобные вещи. Можно хранить несколько наборов графики и подключать наиболее подходящий для девайса, можно собирать бандлы и закачивать с инета нужный, чтобы уменьшить вес приложения в сторе. Можно использовать готовые ассеты для того, чтобы держать несколько наборов графики. Вариантов куча.
KumoKairoПостоялецwww19 авг. 201722:02#8
Есть старое видео по поводу скейлинга
https://youtu.be/HM17mAmLd7k?t=2231
(тайминг важен, про скейлинг там как раз с 37:11). Там то, что я написал текстом, только более наглядно
bretbasПостоялецwww21 авг. 20178:25#9
Lucasito,
Правильного нет, есть оптимальный для конкретного проекта

Ну я же говорю, проект мобильной игры, 2d, жанр аркада. Неужели все аркады под мобильные девайсы делаются в плане спрайтов по разному и люди еще не определили как лучше будет?
Самый простой способ - рисуешь и нарезаешь спрайты под самое большое разрешение, юнити потом сама его уменьшит под девайс

Это увеличит размер файла, который нужно будет скачивать на игровых площадках.
Можно хранить несколько наборов графики и подключать наиболее подходящий для девайса

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

Вот это мне более менее нравится. Но что если нет инета у человека? Хотя, как он тогда на стор зашел...
LucasitoПостоялецwww21 авг. 20179:36#10
bretbas
> Ну я же говорю, проект мобильной игры, 2d, жанр аркада. Неужели все аркады под
> мобильные девайсы делаются в плане спрайтов по разному и люди еще не определили
> как лучше будет?
Ты не поверишь, но даже с такими ограничениями куча вариантов реализации :)

bretbas
> Это увеличит размер файла, который нужно будет скачивать на игровых площадках.
И что? хочешь - делаешь, не хочешь - не делаешь. Это как с машинами, если ты ездишь на Мерседесе и тебе не нравятся ВАЗы, то это же не значит что никто не будет ездить на ВАЗах

KumoKairoПостоялецwww21 авг. 201710:52#11
По поводу нарезанных разных вариантов, автоматического уменьшения или ассетбандлов - вы совершенно не туда свои силы направили. Как я понял, у вас с Unity не сильно много опыта, поэтому сделайте простейшим вариантом с одной нарезкой под большое разрешение и не парьтесь пока
bretbasПостоялецwww21 авг. 201717:25#12
Lucasito,
Это как с машинами, если ты ездишь на Мерседесе и тебе не нравятся ВАЗы, то это же не значит что никто не будет ездить на ВАЗах

Базара нет:)

KumoKairo,

Как я понял, у вас с Unity не сильно много опыта

Его вообще нет:) Я просто не знаю, что мне делать. Хочется сразу все. Прежде чем заниматься Unity, я подтянул знания в C++, паттернах. Попробовал написать свой игровой движочек с одной игрулиной. Но когда я зашел в Unity, я сразу начал путаться. И до сих пор путаюсь. К примеру, я никак не могу привыкнуть к тому, что я не могу наследоваться от GameObject. В своем движке, когда я писал его, я сделал эту возможность, и прежде чем делать полиморфно различных врагов, я подготавливал заранее GameObject с нужными всем врагам компонентами и функционалам. Потом просто наследовался от этого GameObject и создавал разных врагов на его прототипе. В Unity3d я никак не могу привыкнуть к тому, что мне нужно так сказать наследоваться от компонентов/скриптов, чтобы реализовать полиморфное поведение.

Я кстати посмотрел видео, которое Вы мне прислали. Я так понял, что обрезка будет в любом случае - или по высоте, или по ширине.

KumoKairoПостоялецwww21 авг. 201717:33#13
Да, совсем без обрезки не обойтись, тут зависит от конкретного примера и конкретных требований
Хочется сразу все.

Тогда надо цель поставить -
- либо вы копаетесь в технических деталях, заморачиваетесь по каждому чиху и реализуете свои собственные решения
- либо делаете какой-то конечный продукт-игру, и цель рабочего процесса не сделать "идеально", а доделать проект до конца.

Копаться в тонкостях проще и приятней всего, можно без зазрения совести распыляться до бесконечности и при этом иметь какой-то быстрый результат на руках. Я сам этим постоянно занимаюсь и постоянно стараюсь с этим бороться. Но если идея именно в этом, без какого-то конкретного проекта, то всё круто)

Потом просто наследовался от этого GameObject и создавал разных врагов на его прототипе.

Скорее всего вам нужны префабы - прототипы объектов с настроенными компонентами. Можно создавать из кода и настраивать разные варианты на основе прототипа.
bretbasПостоялецwww21 авг. 201718:42#14
KumoKairo,
Скорее всего вам нужны префабы - прототипы объектов с настроенными компонентами. Можно создавать из кода и настраивать разные варианты на основе прототипа.

Да уже так и делаю...никакого наследования вообще.
Копаться в тонкостях проще и приятней всего, можно без зазрения совести распыляться до бесконечности и при этом иметь какой-то быстрый результат на руках. Я сам этим постоянно занимаюсь и постоянно стараюсь с этим бороться. Но если идея именно в этом, без какого-то конкретного проекта, то всё круто)

С идеи в тонкостях копаться тоже приятно. Только долго, ибо заморачиваешься над всякой фигней. Хотя в некоторых случаях это не фигня. Вот к примеру, задавал на офф форуме Unity3d, почему поиск/сравнение и тд тегов у игровых объектов идет через string. Это же ужасно в плане производительности. Так и не дождался ответа...

Страницы: 1 2 Следующая

/ Форум / Программирование игр / 2D графика и изометрия

2001—2017 © GameDev.ru — Разработка игр