|
2D/GUI Вопросы на тему 2D графики и интерфейсов |
17.07.2012, 06:57
|
#1
|
ПроЭктировщик
Регистрация: 17.07.2012
Сообщений: 118
Написано 25 полезных сообщений (для 54 пользователей)
|
Вопрос по созданию игрового интерфейса
Вот к примеру есть скрипт:
var posX = 0.0; var posY = 0.0; var shirina = 0.0; var vysota = 0.0; var scrinWidth = 0.0; var scrinHeight = 0.0; var scrinBalansWidth = 0.0; var scrinBalansHeight = 0.0;
function Start () { posX = guiTexture.pixelInset.x; posY = guiTexture.pixelInset.y; shirina = guiTexture.pixelInset.width; vysota = guiTexture.pixelInset.height; scrinWidth = Screen.width; scrinHeight = Screen.height; scrinBalansWidth = 1280 / scrinWidth; scrinBalansHeight = 800 / scrinHeight; Balans (); }
function Balans () { guiTexture.pixelInset.x = posX / scrinBalansWidth; guiTexture.pixelInset.y = posY / scrinBalansHeight; guiTexture.pixelInset.width = shirina / scrinBalansWidth; guiTexture.pixelInset.height = vysota / scrinBalansHeight; }
Который подстраивает guiTexture под разрешение вашего экрана, но при этом мы в скрипте указываем разрешение экрана, а в юнити размер guiTexture. В итоге при запуске игры с этим разрешением экрана все будет на "ура", но вот если экран меньше - то текстура автоматом уменьшается (но не сдвигается с нужного нам места) это уже радует. Но ведь если текстура уменьшается, значит теряет свое качество. Или же если разрешение экрана стоит больше чем указано в скрипте - тогда текстура будет увеличиваться и терять свое качество.
Вот мне интересно: можно ли с этим как то бороться? Если да - то как? Пожалуйста, поделитесь своими секретами по созданию игрового интерфейса.
P.S.
Мне просто интересно как вы создаете интерфейс или же просто закрываете на это все глаза.
|
(Offline)
|
|
17.07.2012, 06:59
|
#2
|
ПроЭктировщик
Регистрация: 17.07.2012
Сообщений: 118
Написано 25 полезных сообщений (для 54 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
Блин, уже все графические элементы нарисовал (правда чувствую придется переделывать ). Идея полностью готова. Вот только не могу с разрешением экрана разобраться.
|
(Offline)
|
|
17.07.2012, 08:17
|
#3
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
Пример расположения GUITexture в левом верхнем углу экрана:
Position: 0, 1, 0
Pixel Inset: (отступX, -высотаТекстуры - отступY, ширинаТекстуры, высотаТекстуры)
|
Пример расположения GUITexture в правом верхнем углу экрана:
Position: 1, 1, 0
Pixel Inset: (-отступX - ширинаТекстуры, -высотаТекстуры - отступY, ширинаТекстуры, высотаТекстуры)
|
Пример расположения GUITexture в левом нижнем углу экрана:
Position: 0, 0, 0
Pixel Inset: (отступX, отступY, ширинаТекстуры, высотаТекстуры)
|
Пример расположения GUITexture в правом нижнем углу экрана:
Position: 1, 0, 0
Pixel Inset: (-отступX - ширинаТекстуры, отступY, ширинаТекстуры, высотаТекстуры)
|
В качестве отступов и размеров подставляй свои рассчитанные.
PS: при разрешении экрана в 1280х1024 твой интерфейс растянется по высоте. Я бы предложил использовать одинаковую величину для изменения размера scrinBalans = 800 / scrinHeight; для ширины и высоты элементов управления.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.07.2012, 08:39
|
#4
|
ПроЭктировщик
Регистрация: 17.07.2012
Сообщений: 118
Написано 25 полезных сообщений (для 54 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
а можно продемонстрировать на примере ?
|
(Offline)
|
|
17.07.2012, 08:47
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
Скрипт писать сейчас нет времени, может вечером. Но я уже все написал что тебе нужно, используй мои формулы и все у тебя получится
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.07.2012, 08:53
|
#6
|
ПроЭктировщик
Регистрация: 17.07.2012
Сообщений: 118
Написано 25 полезных сообщений (для 54 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Radnk за это полезное сообщение:
|
|
17.07.2012, 08:56
|
#7
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
Раздел по Unity появился сравнительно недавно, по сравнению с самим форумом. Основное назначение форума - язык Blitz3d.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.07.2012, 09:29
|
#8
|
ПроЭктировщик
Регистрация: 17.07.2012
Сообщений: 118
Написано 25 полезных сообщений (для 54 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
Действительно очень понравился ваш форум(как бы не сглазить). Здесь все ясно для новичков. Есть скриншоты, описания, скрипты и даже примеры в действии. Не то что на русском unity3d. Считаю это не приемлемым: http://clip2net.com/s/27Ljc, http://clip2net.com/s/27Ljh, http://i082.radikal.ru/1207/42/29b1c153d11a.jpg и тому подобное поведение (троли одним словом ). Если создали сообщество - то нужно помогать всем, а там в первую очередь стараются слить новичков по ссылке куда нибудь по дальше.
На gcup зарегистрироваться не смог. Капчу не распознает, но там наверное не лучше чем на русском unity3d.
Правда в начале обрадовался когда к вам попал, потом увидел записи за 2010год - подумал что проект пропал.
P.S.
Черканите пример скрипта в свободное время.
|
(Offline)
|
|
17.07.2012, 09:30
|
#9
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
Как тот так (AlignGUITexture.cs):
using UnityEngine;
[RequireComponent(typeof(GUITexture))] public class AlignGUITexture : MonoBehaviour { public Alignment alignment;
public enum Alignment { None, LeftUp, LeftDown, RightUp, RightDown }
public float offsetX; public float offsetY; public float width; public float height; public int defaultScreenHeight = 768; public bool correctSize = true;
void Reset() { if(guiTexture) { width = guiTexture.pixelInset.width; height = guiTexture.pixelInset.height; } }
void Start() { float x = offsetX; float y = offsetY; float w = width; float h = height;
if (correctSize) { var scale = (float)Screen.height/defaultScreenHeight; x *= scale; y *= scale; w *= scale; h *= scale; }
switch (alignment) { case Alignment.None:
break; case Alignment.LeftUp: transform.position = new Vector3(0, 1, transform.position.z); guiTexture.pixelInset = new Rect(x, -h - y, w, h); break; case Alignment.LeftDown: transform.position = new Vector3(0, 0, transform.position.z); guiTexture.pixelInset = new Rect(x, y, w, h); break; case Alignment.RightUp: transform.position = new Vector3(1, 1, transform.position.z); guiTexture.pixelInset = new Rect(-x - w, -h - y, w, h); break; case Alignment.RightDown: transform.position = new Vector3(1, 0, transform.position.z); guiTexture.pixelInset = new Rect(-x - w, y, w, h); break; } } }
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.07.2012, 09:34
|
#10
|
ПроЭктировщик
Регистрация: 17.07.2012
Сообщений: 118
Написано 25 полезных сообщений (для 54 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
|
(Offline)
|
|
17.07.2012, 09:50
|
#11
|
ПроЭктировщик
Регистрация: 17.07.2012
Сообщений: 118
Написано 25 полезных сообщений (для 54 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
Скрипт вешается на саму текстуру ?
а настраивается здесь если я правильно понял ?
case Alignment.LeftUp: transform.position = new Vector3(0, 1, transform.position.z); guiTexture.pixelInset = new Rect(x, -h - y, w, h); break; case Alignment.LeftDown: transform.position = new Vector3(0, 0, transform.position.z); guiTexture.pixelInset = new Rect(x, y, w, h); break; case Alignment.RightUp: transform.position = new Vector3(1, 1, transform.position.z); guiTexture.pixelInset = new Rect(-x - w, -h - y, w, h); break; case Alignment.RightDown: transform.position = new Vector3(1, 0, transform.position.z); guiTexture.pixelInset = new Rect(-x - w, y, w, h);
Вот только как указать что к примеру определенные настройки нужны для этой текстуры, а определенные для другой?
или я все понял не правильно ?
|
(Offline)
|
|
17.07.2012, 15:58
|
#12
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
Создаешь GUITexture в сцене, назначаешь текстуру на компонент GUITexture, далее добавляешь этот скрипт (который я привел) к объекту с GUITexture, в нем выбираешь Allignment (к какому углу привязать), задаешь отступы от края и размер текстуры по умолчанию, если надо корректировать размер в зависимости от высоты экрана - задаешь дефолтную высоту экрана и отмечаешь галочкой что нужна коррекция, запускаешь (жмешь Play), наблюдаешь эффект.
Для следующей текстуры повторяешь операцию. И т.д.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.07.2012, 20:57
|
#13
|
ПроЭктировщик
Регистрация: 17.07.2012
Сообщений: 118
Написано 25 полезных сообщений (для 54 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
|
(Offline)
|
|
26.05.2014, 12:50
|
#14
|
Знающий
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений (для 229 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
с размером текстуры пример хорош, а как быть с высотой текста для разных разрешений? Есть какие-то методы которые позволят их привести к единой высоте при разных разрешениях?
|
(Offline)
|
|
26.05.2014, 13:05
|
#15
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Вопрос по созданию игрового интерфейса
Сообщение от EvilOkta
с размером текстуры пример хорош, а как быть с высотой текста для разных разрешений? Есть какие-то методы которые позволят их привести к единой высоте при разных разрешениях?
|
Возможно за два года многое поменялось и есть другие способы создания gui.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:19.
|