C# 如何在Unity编辑器窗口中显示列表或数组拉出?

C# 如何在Unity编辑器窗口中显示列表或数组拉出?,c#,unity3d,C#,Unity3d,我正在根据Unity Scriptable Objects教程制作一个清单和制作系统: 目前我已经完成了所有这些工作,但我正在尝试扩展它,以增加使用过的药水创造临时增益或装备物品的能力,以增加你的护甲/武器伤害(正如他们所认为的那样)。因此,我的Item类有一个类类型ItemEffect的列表。但我不知道如何让它显示在我的项目数据库编辑器窗口中 我已经在网上做了一些搜索,找到了一些非常古老的解决方案,尽管我必须承认我自己在让它们工作上遇到了困难。我也尝试过使用数组而不是列表(我不介意任何一种),

我正在根据Unity Scriptable Objects教程制作一个清单和制作系统:

目前我已经完成了所有这些工作,但我正在尝试扩展它,以增加使用过的药水创造临时增益或装备物品的能力,以增加你的护甲/武器伤害(正如他们所认为的那样)。因此,我的Item类有一个类类型ItemEffect的列表。但我不知道如何让它显示在我的项目数据库编辑器窗口中

我已经在网上做了一些搜索,找到了一些非常古老的解决方案,尽管我必须承认我自己在让它们工作上遇到了困难。我也尝试过使用数组而不是列表(我不介意任何一种),因为数组更快,我不需要在运行时更改项目数据集,而且由于Unity似乎不认为默认情况下在编辑器窗口中显示列表

Item.cs

使用System.Collections.Generic;
使用UnityEngine;
命名空间PixelsofGames.Inventory
{
公共枚举项类型{武器、盔甲、食物、材料}
公共枚举设备槽{无,头,胸,手,腿,脚,附件1,附件2,武器,盾牌}
公共枚举效应类型{RestoreHP,IncreaseArmor,IncreaseDamage}
[系统可序列化]
公共类项目
{
公共字符串name=“新建项”;
公共字符串description=“项目描述”;
公共精灵图标=空;
公共整数基价=0;
公共int useValue=0;
公共ItemType类型=ItemType.Material;
公共设备插槽设备插槽=设备插槽。无;
公共物品清单效应;
public bool isEquippable=false;
public bool isUseable=false;
公共bool isSellable=false;
公共bool-canDestroy=假;
}
[系统可序列化]
公共类项目效应
{
公共效应类型效应类型;
公众假期持续时间;
公众参与程度;
}
}
itemdeditor.cs

使用UnityEngine;
使用UnityEditor;
使用System.Collections.Generic;
命名空间PixelsofGames.Inventory
{
公共类ItemEditor:EditorWindow
{
公共项目数据库;
私有int viewIndex=1;
矢量2卷轴;
[菜单项(“窗口/项目编辑器%#e”)]
静态void Init()
{
GetWindow(typeof(ItemEditor));
}
void OnEnable()
{
if(EditorPrefs.HasKey(“ObjectPath”))
{
string objectPath=EditorPrefs.GetString(“objectPath”);
itemDatabase=AssetDatabase.LoadAssetPath(objectPath,typeof(itemDatabase))作为itemDatabase;
}
}
void OnGUI()
{
GUILayout.BeginHorizontal();
Label(“项目编辑器”,editorstyle.boldLabel);
if(itemDatabase!=null)
{
if(GUILayout.Button(“显示项目数据库”))
{
EditorUtility.FocusProjectWindow();
Selection.activeObject=itemDatabase;
}
}
if(GUILayout.Button(“未清项数据库”))
{
OpenItemDatabase();
}
if(GUILayout.Button(“新项目数据库”))
{
EditorUtility.FocusProjectWindow();
Selection.activeObject=itemDatabase;
}
GUILayout.EndHorizontal();
if(itemDatabase==null)
{
GUILayout.BeginHorizontal();
空间(10);
if(GUILayout.Button(“创建新项目数据库”,GUILayout.ExpandWidth(false)))
{
CreateItemDatabase();
}
if(GUILayout.Button(“打开现有项目数据库”,GUILayout.ExpandWidth(false)))
{
OpenItemDatabase();
}
GUILayout.EndHorizontal();
}
Guillayout.空间(20);
if(itemDatabase!=null)
{
GUILayout.BeginHorizontal();
空间(10);
if(GUILayout.Button(“Prev”,GUILayout.ExpandWidth(false)))
{
如果(视图索引>1)
视图索引--;
}
空间(5);
if(GUILayout.Button(“下一步”,GUILayout.ExpandWidth(false)))
{
if(viewIndex0)
{
GUILayout.BeginHorizontal();
viewIndex=Mathf.Clamp(EditorGUILayout.IntField(“当前项”,viewIndex,GUILayout.ExpandWidth(false)),1,itemDatabase.Items.Count);
//Mathf.Clamp(viewIndex,1,inventoryItemList.itemList.Count);
EditorGUILayout.LabelField(“of”+itemDatabase.Items.Count.ToString()+“Items”,“”,GUILayout.ExpandWidth(false));
GUILayout.EndHorizontal();
itemDatabase.Items[viewIndex-1].name=EditorGUILayout.TextField(“Item name”,itemDatabase.Items[viewIndex-1]。名称为字符串);