【问题标题】:Unity DropDown.OnValuechanged not workingUnity DropDown.OnValuechanged 不起作用
【发布时间】:2021-08-21 00:54:41
【问题描述】:

我正在尝试向用户选择一个选项并更新播放器偏好设置的场景添加一个下拉列表,当应用重新启动时,下拉列表中的选定选项应该是用户之前选择的选项。

目前我想出的代码如下。

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 ();
    }

这对我来说在逻辑上似乎是正确的,但我不确定我在这里缺少什么。 为了更清楚,我在编辑器中将附加的方法设为动态方法,如下所示

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

【问题讨论】:

    标签: unity3d drop-down-menu


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案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
              }
          }
      

      【讨论】:

      • 在我的脚本中,我正在更改运行时的值,因此它需要更新方法。
      【解决方案3】:

      正如documentation 所说:一个dalegate 就足够了,这里不需要更新。

      【讨论】:

        猜你喜欢
        • 2016-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多