微信小程序> Unity将满足特定条件的子对象设置其它的父物体

Unity将满足特定条件的子对象设置其它的父物体

浏览量:397 时间: 来源:会思考的猴子

有这样一个需求 ,所有子物体都拥有 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();

 

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎