You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity GUI中如何创建依赖输入类型的控制器联动下拉框

Unity 控制器类型切换下拉菜单实现方案

步骤1:搭建UI结构

  • 在Unity编辑器中创建两个Dropdown组件:
    • 第一个命名为InputTypeDropdown,选项添加“键鼠”、“控制器”
    • 第二个命名为ControllerTypeDropdown,选项添加“Xbox控制器”、“PlayStation控制器”,初始状态设置为隐藏(取消Inspector里GameObject的勾选)
  • 添加一个Text(或TextMeshPro - Text)组件,命名为ControlHintText,用来显示对应操作提示

步骤2:编写控制脚本

创建一个名为InputControllerSwitcher的C#脚本,挂载到Canvas或任意空对象上,代码如下:

using UnityEngine;
using UnityEngine.UI;

public class InputControllerSwitcher : MonoBehaviour
{
    // 在Inspector中拖拽对应组件
    [SerializeField] private Dropdown inputTypeDropdown;
    [SerializeField] private Dropdown controllerTypeDropdown;
    [SerializeField] private Text controlHintText;

    // 自定义操作提示文本,可按需修改
    private readonly string[] keyboardHints = { "WASD移动", "鼠标瞄准", "空格跳跃" };
    private readonly string[] xboxHints = { "左摇杆移动", "右摇杆瞄准", "A键跳跃" };
    private readonly string[] psHints = { "左摇杆移动", "右摇杆瞄准", "X键跳跃" };

    void Start()
    {
        // 初始化隐藏控制器类型下拉框
        controllerTypeDropdown.gameObject.SetActive(false);
        
        // 绑定下拉框选项变更事件
        inputTypeDropdown.onValueChanged.AddListener(OnInputTypeChanged);
        controllerTypeDropdown.onValueChanged.AddListener(OnControllerTypeChanged);
        
        // 初始显示键鼠操作提示
        UpdateHintText(0);
    }

    // 输入类型切换逻辑
    private void OnInputTypeChanged(int index)
    {
        bool isControllerSelected = index == 1;
        controllerTypeDropdown.gameObject.SetActive(isControllerSelected);
        
        if (isControllerSelected)
        {
            controllerTypeDropdown.value = 0;
            OnControllerTypeChanged(0);
        }
        else
        {
            UpdateHintText(0);
        }
    }

    // 控制器类型切换逻辑
    private void OnControllerTypeChanged(int index)
    {
        UpdateHintText(index == 0 ? 1 : 2);
    }

    // 更新提示文本的通用方法
    private void UpdateHintText(int hintType)
    {
        string hintContent = hintType switch
        {
            0 => string.Join("\n", keyboardHints),
            1 => string.Join("\n", xboxHints),
            2 => string.Join("\n", psHints),
            _ => ""
        };
        controlHintText.text = hintContent;
    }
}

步骤3:关联组件

在Inspector中,将创建好的InputTypeDropdown、ControllerTypeDropdown、ControlHintText分别拖拽到InputControllerSwitcher脚本的对应字段中。

关键细节

  • 用[SerializeField]让私有变量能在编辑器中赋值,避免暴露不必要的公共接口
  • 通过onValueChanged监听下拉框选项变化,触发显示/隐藏及提示更新逻辑
  • 操作提示数组可以直接修改内容,适配你的游戏实际操作键位

内容的提问来源于stack exchange,提问作者Zane Duncan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:33:24