( :- ) Выпадающее меню для смены разрешения (ingame)

Программирование на Юнити.

( :- ) Выпадающее меню для смены разрешения (ingame)

Сообщение gnoblin 08 ноя 2009, 22:33

Кто-нибудь реализовывал внутриигровой аналог "выпадающего меню с разрешениями, которое появляется при запуске standalone композиции"?
Лениво делать самостоятельно... может у кого есть готовое решение :). :ymdaydream:
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: ( :- ) Выпадающее меню для смены разрешения (ingame)

Сообщение Zaicheg 10 ноя 2009, 16:14

Я тот скрипт от shaun передалал, получилось примерно так.
Я с некоторыми незнакомыми мне раньше вещами столкнулся, так что делал «как получится, лишь бы работало». Укажите на огрехи — поправлю.
В теге нарушилось форматирование — тут ничего поделать не могу. Просто скопируйте код и вставьте в редактор — всё будет нормально выглядеть.
Пока только разрешения. Завтра добавлю фуллскрин и частоту обновления. Завтра же и закомментирую.
В едиторе Screen.resolutions содержит только один элемент. Нормально определяются разрешения в рантайме.

Код: Выделить всё
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class DD1 : MonoBehaviour
{
    Rect DropDownRect = new Rect(100, 100, 160, 28);
    private Vector2 ListScrollPos;
    public bool DropdownVisible = false;
    public int SelectedListItem = -1;
    private List<GuiListItem> MyListOfStuff;
    public string SelectedItemCaption;
    public string ButtonText;
    Resolution[] resolutions;

    public class GuiListItem
    {
        public bool Selected;
        public int X;
        public int Y;
        public string Name;

        //
        public GuiListItem(bool mSelected, int wX, int hY)
        {
            Selected = mSelected;
            X = wX;
            Y = hY;
            Name = System.Convert.ToString(X) + "x" + System.Convert.ToString(Y);
        }

        public GuiListItem(int wX, int hY)
        {
            Selected = false;
            X = wX;
            Y = hY;
            Name = System.Convert.ToString(X) + "x" + System.Convert.ToString(Y);
        }

        public void enable()
        {
            Selected = true;
        }

        public void disable()
        {
            Selected = false;
        }
    }

    void Start()
    {
        resolutions = Screen.resolutions;
        MyListOfStuff = new List<GuiListItem>();
        for (int i = 0; i < resolutions.Length; i++)
        {
            MyListOfStuff.Add(new GuiListItem(resolutions[i].width, resolutions[i].height));
        }
    }

    void OnGUI()
    {
        if (DropdownVisible == true)
        {
            GUILayout.BeginArea(new Rect(DropDownRect.left, DropDownRect.top + DropDownRect.height, 160, 128), "", "box");
            ListScrollPos = GUILayout.BeginScrollView(ListScrollPos, false, true);
            GUILayout.BeginVertical(GUILayout.Width(120));
            for (int i = 0; i < MyListOfStuff.Count; i++)
            {
                if (MyListOfStuff[i].Selected == false && GUILayout.Button(MyListOfStuff[i].Name))
                {
                    if (SelectedListItem != -1)
                        MyListOfStuff[SelectedListItem].disable();
                    SelectedListItem = i;
                    MyListOfStuff[SelectedListItem].enable();
                    DropdownVisible = false;

                    Screen.SetResolution(MyListOfStuff[SelectedListItem].X, MyListOfStuff[SelectedListItem].Y, true, 0);
                }
            }
            GUILayout.EndVertical();
            GUILayout.EndScrollView();
            GUILayout.EndArea();
        }

        GUILayout.BeginArea(DropDownRect, "", "box");
        GUILayout.BeginHorizontal();
        SelectedItemCaption = (SelectedListItem == -1) ? "Select an item..." : MyListOfStuff[SelectedListItem].Name;
        ButtonText = (DropdownVisible) ? "<<" : ">>";
        GUILayout.TextField(SelectedItemCaption);
        DropdownVisible = GUILayout.Toggle(DropdownVisible, ButtonText, "button", GUILayout.Width(32), GUILayout.Height(20));
        GUILayout.EndHorizontal();
        GUILayout.EndArea();
    }
}
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: ( :- ) Выпадающее меню для смены разрешения (ingame)

Сообщение eureka3D 26 ноя 2009, 04:28

Делаю сейчас такое меню...возник вопрос: Можно ли сделать смену АА (Анти-Альяcинга) прям в игре? В справке не нашел...
----------------------------------
Добавленно через 15 минут

Упс, сам нашел:
Код: Выделить всё
if (GUI.Button (Rect (200,15,50,30), "2х"))
   {
      QualitySettings.currentLevel = QualityLevel.Good;
   }
   
   if (GUI.Button (Rect (300,15,50,30), "4х"))
   {
      QualitySettings.currentLevel = QualityLevel.Fantastic;
   }

и меняется АА на ура :ymparty:
Аватара пользователя
eureka3D
UNец
 
Сообщения: 36
Зарегистрирован: 02 июн 2009, 11:39

Re: ( :- ) Выпадающее меню для смены разрешения (ingame)

Сообщение mp3 26 ноя 2009, 05:08

К тому-же в настройках Project settings -> Quality

Вьі можете изменить сглаживание на нужньій Вам уровень. К примеру :
Good = у нас будет Мах графика но без сглаживания;
Fantastic = сглаживание до 16х

И в ингейм меню, как Вьі уже писали :

QualitySettings.currentLevel = QualityLevel.Good; // off
QualitySettings.currentLevel = QualityLevel.Fantastic; // on
Be straight, or go forward.
Аватара пользователя
mp3
Адепт
 
Сообщения: 1071
Зарегистрирован: 21 окт 2009, 23:50

Re: ( :- ) Выпадающее меню для смены разрешения (ingame)

Сообщение Neodrop 26 ноя 2009, 10:28

Не забываем, что смена режимов операция нагрузная для Рендерера. Для быстрой (в каждом кадре) смены сеттинга, лучше использовать
QualitySettings.IncreaseLevel
QualitySettings.DecreaseLevel

Но вот они то, как раp и не меняют АА.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: ( :- ) Выпадающее меню для смены разрешения (ingame)

Сообщение Zaicheg 26 ноя 2009, 10:57

Neodrop писал(а):Не забываем, что смена режимов операция нагрузная для Рендерера. Для быстрой (в каждом кадре) смены сеттинга, лучше использовать
QualitySettings.IncreaseLevel
QualitySettings.DecreaseLevel

Но вот они то, как раp и не меняют АА.

Я так понимаю, неприменением АА их относительная дешевизна для рендерера и ограничивается.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: ( :- ) Выпадающее меню для смены разрешения (ingame)

Сообщение Neodrop 26 ноя 2009, 11:49

Читаем справку, чтобы малость своё "понимание" подправить. Там всё написано. :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: ( :- ) Выпадающее меню для смены разрешения (ingame)

Сообщение Zaicheg 26 ноя 2009, 13:11

Neodrop писал(а):Читаем справку, чтобы малость своё "понимание" подправить. Там всё написано. :-?

Scripting Reference писал(а):Increase the current quality level.
IncreaseLevel and DecreaseLevel functions do not apply anti-aliasing changes. If you want to apply anti-aliasing setting in a different quality level, assign currentLevel variable.

Насколько помню, IncreaseLevel() всегда приводило к смене переменной currentLevel. Поэтому я и делаю вывод, что всё отличие в применении AA.
Scripting Reference писал(а):Note that changing the quality level can be an expensive operation if the new level has different anti-aliasing setting. It's fine to change the level when applying in-game quality options, but do not try changing it each frame. If you want to dynamically adjust quality level at runtime, use IncreaseLevel and DecreaseLevel functions which do not apply anti-aliasing changes.

Здесь также не вижу упоминания каких-либо других особенностей.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: ( :- ) Выпадающее меню для смены разрешения (ingame)

Сообщение Neodrop 26 ноя 2009, 13:33

Ну да. Именно. Смена АА не применяется при использовании
QualitySettings.IncreaseLevel
QualitySettings.DecreaseLevel
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: ( :- ) Выпадающее меню для смены разрешения (ingame)

Сообщение gnoblin 16 май 2010, 18:16

skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: ( :- ) Выпадающее меню для смены разрешения (ingame)

Сообщение JugadorGL 03 ноя 2010, 11:30

Спасибо за скрипт , но возникла проблема.
Монитор ЭЛТ, рабочее разрешение 1152*864, когда пытаюсь выставить в оконном режиме разрешение выше чем данное то вместо того чтобы не влезть в экран, разрешение сжимается до какого-то нестандартного меньшего. Например вместо 1280-760 ставит 1094-720, Вместо 1920-1200, ставиться 1094-820. Если выставлю разрешение экрана скажем 1680 на 1050, то все разрешения которые меньше (тот же 1280-720), в оконном режиме будут отображаться нормально, выше нет.
Проблема в том , что у меня все спрайты в игре интерполируются под стандартные разрешения и из-за нестандартных все рушеться.
Вопрос: "Можно заставить юньку выставлять в оконном режиме то разрешение которое выбрано?" Чтобы при этом рабочее окно проги просто вылазило за пределы экрана.
Заранее спасибо.
JugadorGL
UNец
 
Сообщения: 35
Зарегистрирован: 27 июн 2010, 00:00


Вернуться в Скрипты

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 8