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

Unity中InventoryToggle脚本无法按标签分配预制体至列表以实现Toggle交互功能的问题求助

Unity中InventoryToggle脚本无法按标签分配预制体至列表以实现Toggle交互功能的问题求助

大家好,我是Unity新手,最近在做游戏的背包系统,卡在Toggle交互这一步了,想请各位大佬帮忙看看!

先说说我的背包系统逻辑:

  • 背包左侧是一排Toggle,每个Toggle对应一个收集到的物品名称
  • 选中某个Toggle后,右侧要显示对应物品的描述(之后还要加物品模型,逻辑和描述一致)
  • 物品是通过与Scriptable Object(Item类)交互收集的,Item里存了物品名称、描述、专属标签这些信息
  • 物品收集后,InventoryManager会把对应的Toggle和描述预制体加载到背包画布上,收集和加载这部分是正常的,问题出在Toggle的功能实现上

因为Toggle和物品描述都是预制体,所以我得通过脚本来设置Toggle的交互逻辑。我的核心想法是:

  1. 当选中某个物品Toggle时,隐藏所有其他物品的描述(以及之后要加的模型),只显示当前选中的那个
  2. 我已经把所有物品的标签整理到itemTags数组里了,每个物品的SelectedTag是从Item数据里正确获取的字符串
  3. 计划把所有带当前SelectedTag的预制体放到SelectedItem列表,其他标签的放到OtherItem列表,然后Toggle选中时激活SelectedItem、禁用OtherItem

但现在连列表的分配都没成功,我的AssignToggle方法好像没正确把物体加到列表里。下面是我的代码:

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

public class InventoryToggle : MonoBehaviour
{
    public Toggle toggle;
    [SerializeField]
    // 当前选中物品Toggle对应的所有预制体(物品描述、模型等)
    private List<GameObject> SelectedItem = new List<GameObject>();
    [SerializeField]
    // 未选中物品Toggle对应的所有预制体(物品描述、模型等)
    private List<GameObject> OtherItem = new List<GameObject>();

    // 所有物品的标签数组,每个物品都有自己的专属标签
    public string[] itemTags = new string[] {"ItemTabletten","ItemPostkarte"};

    // 本应将对应标签的预制体分配到对应列表的方法
    public void AssignToggle(string Selectedtag)
    {
        GameObject[] selectedobjects = GameObject.FindGameObjectsWithTag(Selectedtag);
        SelectedItem.AddRange(selectedobjects);

        foreach (string s in itemTags)
        {
            if (s != Selectedtag)
            {
                GameObject[] otherobjects = GameObject.FindGameObjectsWithTag(s);
                OtherItem.AddRange(otherobjects);
            }
        }
    }
}

有没有大佬能帮我找找问题出在哪?或者有没有更合适的实现思路?谢谢大家!

备注:内容来源于stack exchange,提问作者niemand geht

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 08:03:07