我有一个可以分配多个条件的项目列表。它们可以是红色,蓝色,绿色或红色和蓝色,蓝色和绿色,红色和绿色或红色和蓝色和绿色。
我希望能够在运行时创建三个列表。
我开始上课我可以填写
[System.Serializable]
public class Item
{
public bool red;
public bool blue;
public bool green;
}
制作名单
public List<Item> itemList;
我不知道如何制作redList,blueList和greenList。
我很遗憾。我觉得我需要在第一个列表中执行for循环。然后检查bool是否为true,是否将它添加到新列表中。
new List<Item> redList;
for (int i = 0; i < itemList.Count; i++)
{
if( red == true)
{
redList.Add();
}
}
答案 0 :(得分:2)
你的总体想法是正确的。我假设你有ItemList
想要创建三个彩色列表。这是代码。
new List<Item> redList;
for (int i = 0; i < itemList.Count; i++)
{
if(itemList[i].red)
{
redList.Add(itemList[i]);
}
if(itemList[i].blue)
{
blueList.Add(itemList[i]);
}
if(itemList[i].green)
{
greenList.Add(itemList[i]);
}
}
最后blueList
,redList
和greenList
将blue
,red
和green
属性设置为true的所有项。由于元素可以将多种颜色设置为true,因此会有重叠。
答案 1 :(得分:2)
这可能无法回答问题,但它可以帮助有人来到这里(甚至是你)。
你应该考虑Flags:
[System.Serializable]
public class Item
{
public ColorType colorType;
}
[Flags]
enum ColorType
{
Red, Blue, Green
}
然后你有编辑脚本允许在检查员中进行多项选择:
[CustomPropertyDrawer(typeof(ColorType))]
public class IMovementControllerDrawer : PropertyDrawer
{
public override void OnGUI(Rect _position, SerializedProperty _property, GUIContent _label)
{
_property.intValue = EditorGUI.MaskField(_position, _label, _property.intValue, _property.enumNames);
}
}
最后,您可以使用colorType实例来检查它是什么:
if ((this.colorType & ColorType.Red) == ColorType.Red) { // It is Red}
if ((this.colorType & ColorType.Green) == ColorType.Green) { // It is Green}
if ((this.colorType & ColorType.Blue) == ColorType.Blue) { // It is Blue}
注意&amp;那不是&amp;&amp;这是执行一些操作。然后,您的对象可以在if语句中运行0,1,2或所有路径。