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

Unity中kebab数组按钮切换后值重置,需实现持久化并显示于UI

问题修复方案

核心问题与修复点

  1. 肉类分类赋值错误:原代码中miesoMieszane、miesoKurczak、miesoWolowina三个方法均错误地将kebab[1]赋值为"grube",属于复制粘贴导致的bug,需替换为对应肉类名称。
  2. 未实时更新UI:每个按钮点击修改数组后,没有调用WyswietlKebabUI()方法,导致UI无法同步显示最新选择结果。

修复后的完整代码

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class KebabMakerPanel : MonoBehaviour
{
    [SerializeField] TextMeshProUGUI zamowienie;

    // 初始化数组为默认选项
    public string[] kebab = { "ciasto", "mięso", "sos", "rozmiar" };

    #region ciasto
    public void cienkie()
    {
        kebab[0] = "cienkie";
        WyswietlKebabUI(); // 更新UI
    }

    public void grube()
    {
        kebab[0] = "grube";
        WyswietlKebabUI(); // 更新UI
    }
    #endregion

    #region mieso
    public void miesoMieszane()
    {
        kebab[1] = "mieszane"; // 修复赋值错误
        WyswietlKebabUI(); // 更新UI
    }

    public void miesoKurczak()
    {
        kebab[1] = "kurczak"; // 修复赋值错误
        WyswietlKebabUI(); // 更新UI
    }

    public void miesoWolowina()
    {
        kebab[1] = "wolowina"; // 修复赋值错误
        WyswietlKebabUI(); // 更新UI
    }
    #endregion

    #region sos
    public void sosMieszany()
    {
        kebab[2] = "mieszany";
        WyswietlKebabUI(); // 更新UI
    }

    public void sosOstry()
    {
        kebab[2] = "ostry";
        WyswietlKebabUI(); // 更新UI
    }

    public void sosLagodny()
    {
        kebab[2] = "lagodny";
        WyswietlKebabUI(); // 更新UI
    }
    #endregion

    #region rozmiar
    public void rozmiarMaly()
    {
        kebab[3] = "maly";
        WyswietlKebabUI(); // 更新UI
    }

    public void rozmiarSredni()
    {
        kebab[3] = "sredni";
        WyswietlKebabUI(); // 更新UI
    }

    public void rozmiarDuzy()
    {
        kebab[3] = "duzy";
        WyswietlKebabUI(); // 更新UI
    }
    #endregion

    #region zamowienie
    public void WyswietlKebabUI()
    {
        string tekst = "Kebab:\n";
        foreach (var item in kebab)
        {
            tekst += item + "\n";
        }
        zamowienie.text = tekst;
    }
    #endregion
}

额外优化建议

如果想减少重复代码,可使用通用方法处理所有按钮点击,通过参数传递指定分类索引和选中值:

// 通用选择方法
public void SelectOption(int categoryIndex, string selectedValue)
{
    if (categoryIndex >= 0 && categoryIndex < kebab.Length)
    {
        kebab[categoryIndex] = selectedValue;
        WyswietlKebabUI();
    }
}

之后在Unity编辑器中给每个按钮绑定该方法,通过参数传递设置对应索引和值:

  • Ciasto分类按钮:索引0,值"cienkie"/"grube"
  • Mieso分类按钮:索引1,值"mieszane"/"kurczak"/"wolowina"
  • Sos分类按钮:索引2,值"mieszany"/"ostry"/"lagodny"
  • Rozmiar分类按钮:索引3,值"maly"/"sredni"/"duzy"

这种方式能大幅减少代码冗余,降低后续维护成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:27:51