forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D/GUI (http://forum.boolean.name/forumdisplay.php?f=167)
-   -   Вопрос по созданию игрового интерфейса (http://forum.boolean.name/showthread.php?t=17041)

Radnk 17.07.2012 06:57

Вопрос по созданию игрового интерфейса
 
Вот к примеру есть скрипт:

PHP код:

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.posX scrinBalansWidth;
        
guiTexture.pixelInset.posY scrinBalansHeight;
        
guiTexture.pixelInset.width shirina scrinBalansWidth;
        
guiTexture.pixelInset.height vysota scrinBalansHeight;


Который подстраивает guiTexture под разрешение вашего экрана, но при этом мы в скрипте указываем разрешение экрана, а в юнити размер guiTexture. В итоге при запуске игры с этим разрешением экрана все будет на "ура", но вот если экран меньше - то текстура автоматом уменьшается (но не сдвигается с нужного нам места) это уже радует. Но ведь если текстура уменьшается, значит теряет свое качество. Или же если разрешение экрана стоит больше чем указано в скрипте - тогда текстура будет увеличиваться и терять свое качество.

Вот мне интересно: можно ли с этим как то бороться? Если да - то как? Пожалуйста, поделитесь своими секретами по созданию игрового интерфейса.

P.S.
Мне просто интересно как вы создаете интерфейс или же просто закрываете на это все глаза.

Radnk 17.07.2012 06:59

Ответ: Вопрос по созданию игрового интерфейса
 
Блин, :''(( уже все графические элементы нарисовал (правда чувствую придется переделывать ). Идея полностью готова. Вот только не могу с разрешением экрана разобраться.

pax 17.07.2012 08:17

Ответ: Вопрос по созданию игрового интерфейса
 
Пример расположения 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; для ширины и высоты элементов управления.

Radnk 17.07.2012 08:39

Ответ: Вопрос по созданию игрового интерфейса
 
а можно продемонстрировать на примере ? -_-

pax 17.07.2012 08:47

Ответ: Вопрос по созданию игрового интерфейса
 
Скрипт писать сейчас нет времени, может вечером. Но я уже все написал что тебе нужно, используй мои формулы и все у тебя получится ;)

Radnk 17.07.2012 08:53

Ответ: Вопрос по созданию игрового интерфейса
 
Да мне нужен всего лишь этот скрипт, чтобы прижать текстуры по углам, а то я сам еще плохо разбираюсь в написании скриптов. Но очень много времени посвящаю изучению.

К стати, у вас просто потрясающий форум и довольно таки старый как я понял. Почему я про вас раньше не слышал?))) У вас лучшие и понятные уроки для новичков. :super: :super: :super: :super: :super: :super: :super: :super: :super:

pax 17.07.2012 08:56

Ответ: Вопрос по созданию игрового интерфейса
 
Раздел по Unity появился сравнительно недавно, по сравнению с самим форумом. Основное назначение форума - язык Blitz3d.

Radnk 17.07.2012 09:29

Ответ: Вопрос по созданию игрового интерфейса
 
Действительно очень понравился ваш форум(как бы не сглазить). Здесь все ясно для новичков. Есть скриншоты, описания, скрипты и даже примеры в действии. Не то что на русском unity3d. Считаю это не приемлемым: http://clip2net.com/s/27Ljc, http://clip2net.com/s/27Ljh, http://i082.radikal.ru/1207/42/29b1c153d11a.jpg и тому подобное поведение (троли одним словом :crazy: ). Если создали сообщество - то нужно помогать всем, а там в первую очередь стараются слить новичков по ссылке куда нибудь по дальше.

На gcup зарегистрироваться не смог. Капчу не распознает, но там наверное не лучше чем на русском unity3d.

Правда в начале обрадовался когда к вам попал, потом увидел записи за 2010год - подумал что проект пропал. :''((

P.S.
Черканите пример скрипта в свободное время. :)

pax 17.07.2012 09:30

Ответ: Вопрос по созданию игрового интерфейса
 
Как тот так (AlignGUITexture.cs):

PHP код:

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;
            
*= scale;
            
*= scale;
            
*= scale
            
*= scale;
        }

        switch (
alignment)
        {
            case 
Alignment.None:

                break;
            case 
Alignment.LeftUp:
                
transform.position = new Vector3(01transform.position.z);
                
guiTexture.pixelInset = new Rect(x, -ywh);
                break;
            case 
Alignment.LeftDown:
                
transform.position = new Vector3(00transform.position.z);
                
guiTexture.pixelInset = new Rect(xywh);
                break;
            case 
Alignment.RightUp:
                
transform.position = new Vector3(11transform.position.z);
                
guiTexture.pixelInset = new Rect(-w, -ywh);
                break;
            case 
Alignment.RightDown:
                
transform.position = new Vector3(10transform.position.z);
                
guiTexture.pixelInset = new Rect(-wywh);
                break;
        }
    }



Radnk 17.07.2012 09:34

Ответ: Вопрос по созданию игрового интерфейса
 
Ого!!! Я думал вы мне сейчас какой нибудь пример со справкой кините и все, а здесь целый разворот. Сейчас буду разбираться.:)

СПАСИБО:super: :super: :super:

Radnk 17.07.2012 09:50

Ответ: Вопрос по созданию игрового интерфейса
 
Скрипт вешается на саму текстуру ?

а настраивается здесь если я правильно понял ?

PHP код:

case Alignment.LeftUp:
                
transform.position = new Vector3(01transform.position.z);
                
guiTexture.pixelInset = new Rect(x, -ywh);
                break;
            case 
Alignment.LeftDown:
                
transform.position = new Vector3(00transform.position.z);
                
guiTexture.pixelInset = new Rect(xywh);
                break;
            case 
Alignment.RightUp:
                
transform.position = new Vector3(11transform.position.z);
                
guiTexture.pixelInset = new Rect(-w, -ywh);
                break;
            case 
Alignment.RightDown:
                
transform.position = new Vector3(10transform.position.z);
                
guiTexture.pixelInset = new Rect(-wywh); 

Вот только как указать что к примеру определенные настройки нужны для этой текстуры, а определенные для другой?

или я все понял не правильно ?:''((

pax 17.07.2012 15:58

Ответ: Вопрос по созданию игрового интерфейса
 
Создаешь GUITexture в сцене, назначаешь текстуру на компонент GUITexture, далее добавляешь этот скрипт (который я привел) к объекту с GUITexture, в нем выбираешь Allignment (к какому углу привязать), задаешь отступы от края и размер текстуры по умолчанию, если надо корректировать размер в зависимости от высоты экрана - задаешь дефолтную высоту экрана и отмечаешь галочкой что нужна коррекция, запускаешь (жмешь Play), наблюдаешь эффект.

Для следующей текстуры повторяешь операцию. И т.д.

Radnk 17.07.2012 20:57

Ответ: Вопрос по созданию игрового интерфейса
 
pax ты не реально крут ))) :super: :super: :super:

EvilOkta 26.05.2014 12:50

Ответ: Вопрос по созданию игрового интерфейса
 
с размером текстуры пример хорош, а как быть с высотой текста для разных разрешений? Есть какие-то методы которые позволят их привести к единой высоте при разных разрешениях?

Nex 26.05.2014 13:05

Ответ: Вопрос по созданию игрового интерфейса
 
Цитата:

Сообщение от EvilOkta (Сообщение 281512)
с размером текстуры пример хорош, а как быть с высотой текста для разных разрешений? Есть какие-то методы которые позволят их привести к единой высоте при разных разрешениях?

Возможно за два года многое поменялось и есть другие способы создания gui.


Часовой пояс GMT +4, время: 18:50.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot