Почему я не получаю правильное разрешение после того, как собрал игру во встроенном меню настроек, но внутри редактора все в порядке?Единство - PullRequest
0 голосов
/ 17 февраля 2019

Когда я на самом деле пробую игру внутри Unity, все в порядке.Когда я собираю игру и пробую ее, каждое разрешение отображается дважды, и они меняются местами (например, 1920 x 1080 - это 320 x 200, 1680 x 1050 - это 320 x 240 и т. Д.).Я дам вам мой код здесь:

public Dropdown resolutiondropdown;
 Resolution[] resolutions;
 void Start()
 {
     resolutions = Screen.resolutions;
     resolutiondropdown.ClearOptions();
     int currentresolutionindex = 0;
     List<string> options = new List<string>();
     for(int i=resolutions.Length-1;i>=0;i--)
     {
         string option = resolutions[i].width + " x " + resolutions[i].height;
         options.Add(option);
         if (resolutions[i].width == Screen.width && resolutions[i].height == Screen.height)
             currentresolutionindex = i;
     }
     resolutiondropdown.AddOptions(options);
     resolutiondropdown.value = currentresolutionindex;
     resolutiondropdown.RefreshShownValue();
 }
 public void SetResolution(int resolutionindex)
 {
     Resolution resolution = resolutions[resolutionindex];
     Screen.SetResolution(resolution.width, resolution.height, Screen.fullScreen);
 }

И снимок экрана, который я сделал: Меню настроек

1 Ответ

0 голосов
/ 18 февраля 2019

Этот чувак реализует настройку разрешения в этом видео, попробуйте: https://www.youtube.com/watch?v=YOaYQrN1oYQ

Итак, я не могу повторить вашу проблему - ваше решение также отлично работает

Это окно по умолчанию сВаш код:

screenshot

Попробуйте проверить «Разрешение и презентация» в настройках проигрывателя

Это исходный код списка разрешений -Unity просто берет его с вашего компьютера:

/// <summary>
///   <para>All full-screen resolutions supported by the monitor (Read Only).</para>
/// </summary>
public static extern Resolution[] resolutions { [FreeFunction("ScreenScripting::GetResolutions"), MethodImpl(MethodImplOptions.InternalCall)] get; }

Вот почему существует только одно решение - вручную проверить дубликаты и удалить его из списка

...