主菜单由一个主Canvas和一个GameObject组成,我在Canvas上显示并具有Camera。 GameObject也有自己的画布来显示文本。
默认分辨率为1920x1080,因此我将ui元素设置为手动以适合此分辨率。
此屏幕快照是第一个Canvas设置和“主菜单”层次结构的构建:
之所以需要另一个Canvas和Camera,是这是我可以在第一个Canvas上显示带有GameObject动画和文本ui的GameObject(NAVI)的唯一方法。
两个画布设置都相同。
现在我在编辑器中进行了更改,甚至在将游戏运行到另一个分辨率1024x768之前。现在所有的用户界面都一团糟。在全屏或窗口模式下通过内置的exe文件运行游戏时,情况相同:
而且我每个分辨率都有许多不同的帧速率,所以这有点困难,并且像我为默认的1920x1080所做的那样,将需要手动设置每个分辨率的时间。
这是我用来从下拉菜单更改分辨率的脚本。脚本被附加到主菜单下的第一个主画布上:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.UI;
public class SettingsMenu : MonoBehaviour
{
public AudioMixer audioMixer;
public Text volumeInPercentages;
public Dropdown resolutionDropDown;
[SerializeField]
private Slider _volumeSlider;
[SerializeField]
private Dropdown _dropDownQuality;
private Resolution[] resolutions;
private void Start()
{
resolutions = Screen.resolutions;
resolutionDropDown.ClearOptions();
List<string> options = new List<string>();
int currentResolutionIndex = 0;
for (int i = 0; i < resolutions.Length; i++)
{
string option = resolutions[i].width + " x " + resolutions[i].height
+ " " + resolutions[i].refreshRate.ToString() + " Hz";
options.Add(option);
if (resolutions[i].width == Screen.currentResolution.width &&
resolutions[i].height == Screen.currentResolution.height)
{
currentResolutionIndex = i;
}
}
resolutionDropDown.AddOptions(options);
resolutionDropDown.value = currentResolutionIndex;
resolutionDropDown.RefreshShownValue();
}
public void SetVolume()
{
float volume = _volumeSlider.value;
Debug.Log("Volume " + volume);
audioMixer.SetFloat("MusicVol", Mathf.Log10(volume) * 20);
volumeInPercentages.text = Mathf.Round(volume * 100).ToString() + " %";
}
public void SetQuality()
{
int qualityIndex = _dropDownQuality.value;
QualitySettings.SetQualityLevel(qualityIndex);
}
public void SetFullScreen()
{
Screen.fullScreen = !Screen.fullScreen;
}
public void SetResolution()
{
Resolution resolution = resolutions[resolutionDropDown.value];
Screen.SetResolution(resolution.width, resolution.height, Screen.fullScreen);
}
}
在您的情况下,您正在将Canvas Scaler设置为通过匹配高度来按屏幕尺寸缩放,因此它们始终适合垂直轴。这是重要的一点。
查看元素的Rect变换,并将其锚定在屏幕的正确点。
[您的所有元素可能都固定在屏幕中央,导致它们离开游戏场景。
Here是有关RectTransforms,Pivot,Anchors的一些更详细的信息...