统一C#下拉序言文字

时间:2018-08-28 16:30:29

标签: c# user-interface unity3d text dropdown

我正在尝试在登录屏幕的一部分中提供一个下拉选项,该选项为用户选择要登录的域,例如“事件a”和“管理员”。我希望在下拉UI上有“选择域...”的序言文本,通常在选择选项之前会显示所选选项。当前,启用播放模式后,无论是否进行了选择,它始终显示顶部选项。在选择了某个选项之前,是否有任何方法可以禁用或更改它以显示前言文本?

使用统一的2018.2.5f1和c#

请观看超链接的视频以直观了解我的问题 https://youtu.be/1bX_xc4sDeE

ps我对C#和统一UI还是相当陌生,所以可能在xD上犯了一些可怕的错误

对于任何有关访问级别(对于管理员-只能访问管理员的场景)以及正确实施用户帐户的建议,我也将不胜感激! :)谢谢!

2 个答案:

答案 0 :(得分:0)

不幸的是,无法将占位符置于Unity下拉列表中(至少目前如此)

在这种情况下,一种常见的方法是使下拉菜单中的第一项为"Please Select Domain",然后用代码处理选择。

(例如,如果玩家没有选择任何其他选项,那么不要让他们继续前进)

答案 1 :(得分:0)

实际上,Label的文本应该完全可以根据需要工作。

(对我来说,如果我将Dropdown添加到一个空场景中,请更改Label的文本,然后单击Play,我会看到Label直到更改值。)


但是,我认为您的问题是,您在代码中的某个位置已经更改了value中的Dropdown,例如到0-1,使其跳至0。确保在用户未触摸之前,请勿触摸value

仍然:标签也可能更改为某些字符串,默认情况下value始终设置为0。因此,最简单的解决方案可能是添加其他选项:

using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(Dropdown))]
[DisallowMultipleComponent]
public class DropdownPlaceholder : MonoBehaviour
{
    private Dropdown _dropdown;
    [SerializeField] private string _placeHolder;

    // Use this for initialization
    private void Start()
    {
        _dropdown = GetComponent<Dropdown>();

        // add the placeholder option
        _dropdown.options.Insert(0, new Dropdown.OptionData(_placeHolder));
        // after adding an option Dropdown adjusts the value so
        // we have to set it to the new option
        _dropdown.value = 0;
        // Dropdown still wouldn't adopt the label -> set the label
        _dropdown.captionText.text = _placeHolder;
    }
}

现在,您只需将占位符文本设置为所需的任何内容即可。

随后,无论您在何处使用该值,都必须记住使用_dropdown.value -1来代替,因为您想忽略第一个条目。