挂载空物体上,配置默认下拉框就行,打包后能看到最终效果
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class DropdownResolution : MonoBehaviour
{
public TMP_Dropdown resolutionDropdown;
private Resolution[] resolutions;
void Start()
{
// 获取系统支持的所有分辨率
resolutions = Screen.resolutions;
// 清空Dropdown中的选项
resolutionDropdown.ClearOptions();
// 添加分辨率选项到Dropdown
foreach (Resolution resolution in resolutions)
{
string inputString = resolution.ToString();
// 提取前十一个字符
string firstTenChars = inputString.Substring(0, Mathf.Min(11, inputString.Length));
resolutionDropdown.options.Add(new TMP_Dropdown.OptionData(firstTenChars));
}
// 设置默认选中的分辨率为当前屏幕分辨率
resolutionDropdown.value = GetResolutionIndex(Screen.currentResolution);
// 监听分辨率选项的变化事件
resolutionDropdown.onValueChanged.AddListener(OnResolutionChanged);
}
void OnResolutionChanged(int index)
{
// 根据选中的分辨率索引设置游戏窗口分辨率和大小
Resolution selectedResolution = resolutions[index];
Screen.SetResolution(selectedResolution.width, selectedResolution.height, false);
}
int GetResolutionIndex(Resolution resolution)
{
// 根据分辨率获取索引
for (int i = 0; i < resolutions.Length; i++)
{
if (resolutions[i].width == resolution.width && resolutions[i].height == resolution.height)
{
return i;
}
}
return 0;
}
}
改写dropDown根据当前所选项目,自动滚动到所选项目的位置(可不加,一点小细节)
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class DropDownHelper : TMP_Dropdown
{
public override void OnPointerClick(PointerEventData eventData)
{
base.OnPointerClick(eventData);
if(!IsInteractable()||!IsActive())
{
return;
}
Scrollbar scrollbar = gameObject.GetComponentInChildren<ScrollRect>()?.verticalScrollbar;
if (scrollbar != null&&options.Count>1)
{
scrollbar.value=Mathf.Max(0.001f,1.0f-(float)value/(options.Count-1));
}
}
}