Выравнивание GUI (С#)

Лучший способ помочь другим, поделиться своими находками.

Выравнивание GUI (С#)

Сообщение pod4444 03 июн 2012, 14:36

По мотивам соседней темы

Синтаксис:
Используется csharp
using UnityEngine;

public static class AlignmentGUI
{
    static Vector2 ratioValue;

    public static void ThisObjectCalculate(GameObject GO, float screenWidth, float screenHeight)
    {
        ratioValue.x = screenWidth / Screen.width;
        ratioValue.y = screenHeight / Screen.height;
        if (GO.guiTexture != null)
        {
            GO.guiTexture.pixelInset = new Rect(GO.guiTexture.pixelInset.x / ratioValue.x, GO.guiTexture.pixelInset.y / ratioValue.y, GO.guiTexture.pixelInset.width / ratioValue.x, GO.guiTexture.pixelInset.height / ratioValue.y);
        }
        if (GO.guiText != null)
        {
            GO.guiText.pixelOffset = new Vector2(GO.guiText.pixelOffset.x / ratioValue.x, GO.guiText.pixelOffset.y / ratioValue.y);
            GO.guiText.fontSize = (int)(GO.guiText.fontSize / ratioValue.y);
        }
    }

    public static void AllObjectsCalculate(float screenWidth, float screenHeight)
    {
        ratioValue.x = screenWidth / Screen.width;
        ratioValue.y = screenHeight / Screen.height;
        GUITexture[] masTex = Object.FindObjectsOfType(typeof(GUITexture)) as GUITexture[];
        GUIText[] masText = Object.FindObjectsOfType(typeof(GUIText)) as GUIText[];
        foreach (GUITexture temp in masTex)
        {
            temp.pixelInset = new Rect(temp.pixelInset.x / ratioValue.x, temp.pixelInset.y / ratioValue.y, temp.pixelInset.width / ratioValue.x, temp.pixelInset.height / ratioValue.y);
        }
        foreach (GUIText temp in masText)
        {
            temp.pixelOffset = new Vector2(temp.pixelOffset.x / ratioValue.x, temp.pixelOffset.y / ratioValue.y);
            temp.fontSize = (int)(temp.fontSize / ratioValue.y);
        }
    }
}
 


Синтаксис:
Используется csharp
using UnityEngine;

public class ShellAligmentGUI : MonoBehaviour
{
    public float screenWidth, screenHeight;

    void Start()
    {
        AlignmentGUI.AllObjectsCalculate(screenWidth, screenHeight);
        //AlignmentGUI.ThisObjectCalculate(gameObject, screenWidth, screenHeight); если нужно пересчитать текстуру или текст именно на этом GameObject;
    }
}
 


Как работает?

Очень просто: оба скрипта в тело проекта. Второй (ShellAligmentGUI) вешаем на какой-либо ГО. В инспекторе указываем под какое разрешение подгоняли текстуры и текст. При запуске у вас все GUITexture и GUIText примут нужное разрешение.
На тот случай если вы динамически создаете GUITexture или GUIText, есть метод

Синтаксис:
Используется csharp
AlignmentGUI.ThisObjectCalculate(gameObject, screenWidth, screenHeight);


он поможет пересчитать размер текстур и текста именно для этого геймобъекта.
Если у вас есть какой-нибудь GameController, который совершает координацию игры, то прямо в нем можно вызвать
Синтаксис:
Используется csharp
AlignmentGUI.AllObjectsCalculate(screenWidth, screenHeight);
Последний раз редактировалось pod4444 21 июн 2012, 12:24, всего редактировалось 1 раз.
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт

Re: Выравнивание GUI (С#)

Сообщение dronik911 05 июн 2012, 23:32

спасибо большое, для подгонки под планшет просто супер
dronik911
UNIт
 
Сообщения: 81
Зарегистрирован: 19 фев 2012, 11:48

Re: Выравнивание GUI (С#)

Сообщение pod4444 06 июн 2012, 19:58

dronik911 писал(а):спасибо большое, для подгонки под планшет просто супер

самое интересное, что скрипты написаны без проверки в юнити :D только Visual Studio. Рад, что кому-то пригодилось.
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт

Re: Выравнивание GUI (С#)

Сообщение faceOFF 08 июн 2012, 12:44

Спасибо огромное!!! Единсвенный рабочий скрипт, из 10ка озвученных!!!
только из за
public static sealed class AlignmentGUI
- ошибка...
поменял на
Синтаксис:
Используется csharp
public class AlignmentGUI : MonoBehaviour

и всё отличнейше заработало на моих Джоях!!! Огромное спасибо!!!!
Аватара пользователя
faceOFF
UNец
 
Сообщения: 30
Зарегистрирован: 26 апр 2012, 06:43

Re: Выравнивание GUI (С#)

Сообщение faceOFF 08 июн 2012, 16:09

Радость была не долгой ((
После перезапуска Юньки (3.5.2f2) скрипт не работает, если ShellAligmentGUI по новой
назначить на GameObject, выставив разреху, всё работает до следующего перезапуска (полная Ж) ...
Что это может быть? У меня джой Dual TouchPads из Standard Assets (Mobile), могут его скрипты конфликтовать?
Аватара пользователя
faceOFF
UNец
 
Сообщения: 30
Зарегистрирован: 26 апр 2012, 06:43

Re: Выравнивание GUI (С#)

Сообщение pod4444 09 июн 2012, 07:54

faceOFF писал(а):
Скрытый текст:
Спасибо огромное!!! Единсвенный рабочий скрипт, из 10ка озвученных!!!
только из за
public static sealed class AlignmentGUI
- ошибка...
поменял на
Синтаксис:
Используется csharp
public class AlignmentGUI : MonoBehaviour

и всё отличнейше заработало на моих Джоях!!! Огромное спасибо!!!!


Вы наверно пытались повесить AlignmentGUI на ГО, этого делать не нужно было.

он должен быть объявлен именно так

Синтаксис:
Используется csharp
public static sealed class AlignmentGUI


или так

Синтаксис:
Используется csharp
public static class AlignmentGUI


Возможно шел слетает из-за этого
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт

Re: Выравнивание GUI (С#)

Сообщение faceOFF 09 июн 2012, 08:25

Вы наверно пытались повесить AlignmentGUI на ГО, этого делать не нужно было. он должен быть объявлен именно так ...

Вобщем у меня так скрипт не компелился даже - красный еррор...
А когда поправил, заработало, но после перезагрузки... Вобщем уже разобрался - это скрипт джоя перехватывал значение defaultRect и сдвигал GUITexture обратно...
И делал это именно после перезагрузки...
Вобщем пришлось взять код из
По мотивам соседней темы
модифицировал под себя,"раскидал" нужное в скрипте джоя (ибо джой написан на JS), и всё заработало как часики! Но всё равно спасибо! Тк Ваш топик в итоге навёл на правильное решение..
Аватара пользователя
faceOFF
UNец
 
Сообщения: 30
Зарегистрирован: 26 апр 2012, 06:43


Вернуться в Исходники (Копилка)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


cron