Как программно узнать Aspect Ratio окна Game View? [Решено]

Раздел, посвящённый всему, что связано с программированием для Редактора Юнити. Скрипты Редактора, Wizards и прочее.

Как программно узнать Aspect Ratio окна Game View? [Решено]

Сообщение ABCpt 21 ноя 2014, 00:01

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

Screen.width/Screen.height не предлагать, ибо они показывают фактические(ресайженные) размеры окна, а не указанные в Game View. Пытался искать здесь UnityEditor.* , но ничего не нашлось, на просторах интернета тоже как-то глухо, возможно не так ищу... :-?

Ну и, собственно, вопрос: Возможно ли программно узнать Aspect Ratio окна Game View, и если Да, то как это сделать? :-\
Последний раз редактировалось ABCpt 21 ноя 2014, 18:27, всего редактировалось 2 раз(а).
ABCpt
UNец
 
Сообщения: 16
Зарегистрирован: 28 май 2013, 20:15

Re: Как программно узнать Aspect Ratio окна Game View?

Сообщение DbIMok 21 ноя 2014, 00:22

в смысле аспект "ресайженного" не соответствует заданному или в чем вопрос?
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как программно узнать Aspect Ratio окна Game View?

Сообщение ABCpt 21 ноя 2014, 01:23

К примеру, дисплей ретина 1536x2048 в мой монитор не поместится, поэтому Screen всегда будет указывать высоту/ширину меньше необходимой(в примере ниже это 315х420). Мне же нужно получить значения 1536 и 2048, которые я указал в Game.
У вас нет доступа для просмотра вложений в этом сообщении.
ABCpt
UNец
 
Сообщения: 16
Зарегистрирован: 28 май 2013, 20:15

Re: Как программно узнать Aspect Ratio окна Game View?

Сообщение DbIMok 21 ноя 2014, 02:10

почему вы хотите получить значения, написанные вами в окне GameView, а не написанные вами же в скрипте, конфигурационном файле либо где либо еще? их наверное можно достать через жрефлексию, но в этом нет никакого смысла.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как программно узнать Aspect Ratio окна Game View?

Сообщение ABCpt 21 ноя 2014, 11:34

DbIMok писал(а):почему вы хотите получить значения, написанные вами в окне GameView

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

DbIMok писал(а):а не написанные вами же в скрипте, конфигурационном файле либо где либо еще?

Тогда придется каждый раз вручную указывать соотношение сторон соответствующее заданным в редакторе, т.к. вопрос как дотянуться до этих значений из окна Game остался не решенным. Указывая вручную там и там я получаю "правильную картинку", но хотелось автоматизировать.
ABCpt
UNец
 
Сообщения: 16
Зарегистрирован: 28 май 2013, 20:15

Re: Как программно узнать Aspect Ratio окна Game View?

Сообщение DbIMok 21 ноя 2014, 16:11

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

public class TestGameView : ScriptableObject {

        [MenuItem("Test/GameViewSize")]
        static void Init() {
                Debug.Log(GetCurrentGameViewSize().ToString());
        }

        static Vector2 GetCurrentGameViewSize() {
                System.Type gameViewType = System.Type.GetType("UnityEditor.GameView,UnityEditor");
                System.Reflection.MethodInfo GetMainGameView = gameViewType.GetMethod("GetMainGameView", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic);
                object mainGameViewInst = GetMainGameView.Invoke(null, null);
                if (mainGameViewInst != null) {
                        System.Reflection.PropertyInfo currentGameViewSize = gameViewType.GetProperty("currentGameViewSize",
                                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public |
                                System.Reflection.BindingFlags.NonPublic);
                        object gameViewSize = currentGameViewSize.GetValue(mainGameViewInst, null);
                        System.Type gameViewSizeType = gameViewSize.GetType();
                        int width = (int)gameViewSizeType.GetProperty("width").GetValue(gameViewSize, null);
                        int height = (int)gameViewSizeType.GetProperty("height").GetValue(gameViewSize, null);
                        return new Vector2(width, height);
                } else {
                        Debug.LogWarning("mainGameViewInst = null");
                        return new Vector2(0, 0);
                }
        }
}
У вас нет доступа для просмотра вложений в этом сообщении.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как программно узнать Aspect Ratio окна Game View?

Сообщение ABCpt 21 ноя 2014, 16:46

Ого! Я бы до такого не додумался. Все работает, большое спасибо!
ABCpt
UNец
 
Сообщения: 16
Зарегистрирован: 28 май 2013, 20:15


Вернуться в Editor

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

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