Unity DropDown.OnValuechanged 不起作用

Ach*_*iya 6 unity-game-engine drop-down-menu

我正在尝试向场景添加一个下拉列表,其中用户选择一个选项并更新播放器首选项,并且当应用程序重新启动时,下拉列表中的所选选项应该是用户之前选择的选项。

到目前为止我想出的代码如下。

public Dropdown mViewerTypeDropDown;
    void Start () {
        mDebug = (LRDebug)mScriptHolder.GetComponent<LRDebug> ();
        mScriptHolder=GameObject.Find ("ScriptHolder");
        mViewerTypeDropDown.captionText.text = PlayerPrefs.GetString ("Viewer Type","Generic Cardboard (Default)");

    }
//The Function attached to onvaluechanged listner
public void ViewerTypeChanged(int value)
    {

        mViwerTypeChange = value;

        switch (mViwerTypeChange) {
        case 0:
            mViewerType = "Generic Cardboard (Default)";
            break;
        case 1:
            mViewerType="VR ONE (Zeiss)";
            break;
        case 2:
            mViewerType="VR Goggles (Merge)";
            break;
        case 3:
            mViewerType="C1-Glass (Go4D)";
            break;
        case 4:
            mViewerType="Cardboard v1 (Google)";
            break;
        }

        PlayerPrefs.SetString("Viewer Type",mViewerType);
        PlayerPrefs.Save ();
    }
Run Code Online (Sandbox Code Playgroud)

这对我来说在逻辑上似乎是正确的,但我不确定我在这里缺少什么。为了进一步明确,我已将附加方法设置为编辑器中的动态方法,如下所示 在此输入图像描述

我已经搜索了很多,但由于这个下拉选项是一个新选项,所以还没有很多例子。因此,作为一名统一新手,我似乎无法解决这个问题。如果有人能帮助我,这将是一个很大的帮助。谢谢

小智 6

是的,您可以将下拉列表本身绑定到该方法。我有许多使用相同逻辑的下拉菜单,不需要委托和“addListener”。

//dropdown
    public void OnDropDownChanged(Dropdown dropDown)
    {
        Debug.Log("DROP DOWN CHANGED -> " + dropDown.value);
    }
Run Code Online (Sandbox Code Playgroud)

如果您使用 TextMeshPro,请使用 TMP_Dropdown。


pau*_*l p 2

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;

public class dropdowns : MonoBehaviour 
{
    public Dropdown mydropdown;

    // Use this for initialization
    void Start () 
    {


        mydropdown.onValueChanged.AddListener(delegate
        {
            selectvalue(mydropdown);
        });
    }
    private void selectvalue(Dropdown gdropdown)
    {

    }



    // Update is called once per frame
    void Update () 
    {

        dropdownchk();
    }

   public void dropdownchk()
    {

        if (mydropdown.value == 0)
        {
            // do something
        }
    }
Run Code Online (Sandbox Code Playgroud)