public void CheckLegal() { //Debug.LogError("111111111111111111all_power_parts.Count = " + all_power_parts.Count); //这个函数每帧检测零件的合法性变化情况及时更改各个列表中储存的零件 //清空缓存列表: if (remove_those_from_all_legal_parts.Count != 0) { remove_those_from_all_legal_parts.Clear(); } foreach (var p in all_parts) { if (p.legal) { //如果检测零件合法但是合法零件列表中没有这个零件,就添加 if (!all_legal_parts.Contains(p)) { all_legal_parts.Add(p); //然后再向分类的合法零件列表中添加 if (p.part_type == PartType.PowerPart && !all_power_parts.Contains(p)) { Debug.LogError("这里添加" + all_power_parts.Count); //如果是动力组件并且分类列表中没有这个组件才添加 PowerPart temp = p.GetComponent <PowerPart>(); button_controller.BanPowerPartButton(); all_power_parts.Add(temp); have_power_part = true; Debug.LogError("这里添加" + all_power_parts.Count); } else if (p.part_type == PartType.LegPart && !all_leg_parts.Contains(p)) { LegPart temp = p.GetComponent <LegPart>(); all_leg_parts.Add(temp); //执行移动组件检测重新确定左右是否都有合法的移动组件 CheckMovementSide(); } else if (p.part_type == PartType.ControlPart && !all_ctrl_parts.Contains(p)) { ControlPart temp = p.GetComponent <ControlPart>(); all_ctrl_parts.Add(temp); } else if (p.part_type == PartType.Equipment && !all_equip_parts.Contains(p)) { EquipmentPart temp = p.GetComponent <EquipmentPart>(); all_equip_parts.Add(temp); } } } else { //如果检测零件不合法,先添加到移除的缓存列表中 //一个零件由合法转为不合法的时,此时 all_legal_parts 里存在这个零件,但 p.legal = false; if (all_legal_parts.Contains(p) && !p.legal) { remove_those_from_all_legal_parts.Add(p); //Debug.LogError("零件已经进入移除缓存区"); //再处理其他合法零件列表 if (p.part_type == PartType.PowerPart && all_power_parts.Contains(p)) { PowerPart temp = p.GetComponent <PowerPart>(); button_controller.ReleasePowerPartButton(); all_power_parts.Remove(temp); have_power_part = false; //Debug.LogError(all_power_parts.Contains(p)); //Debug.LogError("这里" + all_power_parts.Count); } else if (p.part_type == PartType.LegPart && all_leg_parts.Contains(p)) { LegPart temp = p.GetComponent <LegPart>(); all_leg_parts.Remove(temp); //执行移动组件检测重新确定左右是否都有合法的移动组件 CheckMovementSide(); } else if (p.part_type == PartType.ControlPart && all_ctrl_parts.Contains(p)) { ControlPart temp = p.GetComponent <ControlPart>(); all_ctrl_parts.Remove(temp); } else if (p.part_type == PartType.Equipment && all_equip_parts.Contains(p)) { EquipmentPart temp = p.GetComponent <EquipmentPart>(); all_equip_parts.Remove(temp); } } } } //Debug.LogError("all_legal_parts = " + all_legal_parts.Count); foreach (var p in remove_those_from_all_legal_parts) { all_legal_parts.Remove(p); Debug.LogError(p.name + "零件已从合法零件列表中移除"); } }