有这样一个需求 ,所有子物体都拥有 m_bSelected 这样一个 bool 变量,当其中有值为true 时,将它们移动到 PlayCardPanel 下

Card.cs
public bool m_bSelected = false; // 卡牌是否被选中 /// summary /// 将牌打出 /// /summary public void SetRemoveCard() { if (!m_bSelected) return; // 没有被选择的牌不执行下面的操作 transform.GetComponentBoxCollider2D().enabled = false; // 打出的牌不再具有碰撞体 transform.SetParent(m_playCardPanel); // 移动到其他父物体 }这样调用是不对的 ,这样调用是不对的, 这样调用是不对的 重要是事说三遍
//这样调用是不对的 for (int i = 0; i transform.childCount; i++) { transform.GetChild(i).GetComponentCard().SetRemoveCard(); }正确做法(如果有更好的方法 @ me)
1. 从最后一个往上移除
for (int i = transform.childCount-1; i = 0; i--) { transform.GetChild(i).GetComponentCard().SetRemoveCard(); m_listCurrentCards.Remove(transform.GetChild(i).GetComponentCard()); }2.m_listCurrentCards 存储的是子对象上的 Card 类
ListCard m_listCurrentTempCards = m_listCurrentCards .Where(a = a.m_bSelected == true).ToList(); for (int i = 0; i m_listCurrentTempCards.Count; i++) { m_listCurrentTempCards[i].SetRemoveCard(); m_listCurrentCards.Remove(m_listCurrentTempCards[i]); }3. 更简洁的方式
foreach (var item in m_listCurrentCards) { item.SetRemoveCard(); } m_listCurrentCards = m_listCurrentCards .Where(a = a.m_bSelected != true).ToList();













