public override void  OnMsg(int msgID, object args)
 {
     if (msgID == (int)Const_Util.UNIT_MSG.SET_STATUS)
     {
         Const_Util.UnitStatus statusTemp = (Const_Util.UnitStatus)args;
         SetStatus(statusTemp);
     }
 }
    //    void OnCollisionEnter2D(Collision2D other)
    //    {
    //        if (other.transform.tag == "Player")
    //        {
    //            DoOnDestroy();
    //        }
    //        else if (other.transform.tag == "Enemy")
    //        {
    //            SendMsg((int)Const_Util.UNIT_MSG.COLLIDER_OCCUR, null);
    //        }
    //    }
    //
    //    void OnCollisionStay2D(Collision2D other)
    //    {
    //    }
    //
    //    void OnCollisionExit2D(Collision2D other)
    //    {
    //    }
//    public enum UnitStatus
//    {
//        Normal_Move = 0,
//        FLY = 1,
//    }
//
//
//    public enum SKILL_AVOID
//    {
//        UNKNOWN = 0,
//        CHG_ROAD = 1,
//        FLY = 2,
//    }

    bool CheckSKillHitValid(Transform hitUnit, SkillBaseInfoCom skillInfoCom)
    {
        if (skillInfoCom.mOwnerPlayerIndx == cobj.mPlayerIdx)
        {
            return(false);
        }

        int   skillID = skillInfoCom.mSkillID;
        SKILL skill   = DataCfgMgr.instance.GetSkill(skillID);

        StatusCom statusCom = hitUnit.GetComponent <StatusCom>();

        Const_Util.UnitStatus status = statusCom.GetStatus();
        if (skill.avoid_method == (uint)Const_Util.SKILL_AVOID.FLY)
        {
            if (status == Const_Util.UnitStatus.FLY)
            {
                return(false);
            }
        }
        //SKILL_AVOID.CHG_ROAD; 开始锁定位置,后面不追踪,改变车道不会发生碰撞
        return(true);
    }
 void SetStatus(Const_Util.UnitStatus status)
 {
     _status = status;
 }
    void OnTriggerEnter2D(Collider2D other)
    {
        if (skillCom == null)
        {
            skillCom = GetCom("SkillCom") as SkillCom;
        }

        if (skillCom == null)
        {
            return;
        }

        if (other.transform.tag == "SkillDrop" && this.transform.tag == "Player")
        {
            if (getRandomSkillCD <= 0.0f && !skillCom.HasSkill())
            {
                SkillBrushMgr.instance.ReleaseItemByID(other.transform.parent.gameObject.GetInstanceID());
                SendMsg((int)Const_Util.UNIT_MSG.GET_SKILL, null);
                getRandomSkillCD = 1.0f;
            }
        }
        else if (other.transform.tag == "Skill" && this.transform.tag == "Player")
        {
            if (skillEfxHitCD > Const_Util.FLT_EPSILON)
            {
                return;
            }
            SkillBaseInfoCom skillInfoCom = other.transform.parent.GetComponent <SkillBaseInfoCom>();
            if (!CheckSKillHitValid(this.transform, skillInfoCom))
            {
                return;
            }
            // disable skill efx obj
            if (other.transform.parent != null)
            {
                other.transform.parent.gameObject.SetActive(false);
            }
            int   skillID = skillInfoCom.mSkillID;
            SKILL skill   = DataCfgMgr.instance.GetSkill(skillID);
            // play hit efx
            SendMsg((int)Const_Util.UNIT_MSG.SKILL_HIT_EFX, skillID);

            BattleMsgDef.SkillHitInfo skillHitEfx = new BattleMsgDef.SkillHitInfo((int)skill.type, skill.speed_scale,
                                                                                  skill.chg_time, skill.continue_time, skill.reset_time);
            switch (skill.type)
            {
            case (uint)Const_Util.SKILL_TYPE.SPEED_DESC:
            {
                SendMsg((int)Const_Util.UNIT_MSG.SKILL_DESC, skillHitEfx);
                break;
            }

            case (uint)Const_Util.SKILL_TYPE.SPEED_STOP:
            {
                break;
            }

            case (uint)Const_Util.SKILL_TYPE.SCREEN_PIC:
            {
                break;
            }

            case (uint)Const_Util.SKILL_TYPE.SELF_BUFF:
            {
                break;
            }

            default:
            {
                Debug.LogError("ColliderCom OnTriggerEnter2D undefine (int)skill.type:" + skill.type.ToString());
                break;
            }
            }

            skillEfxHitCD = 1.0f;
        }

        if (collisionCD > Const_Util.FLT_EPSILON)
        {
            return;
        }
        if (other.transform.tag == "Player")
        {
            StatusCom             statusCom = other.gameObject.GetComponent <StatusCom>();
            Const_Util.UnitStatus status    = statusCom.GetStatus();
            if (status != Const_Util.UnitStatus.FLY)
            {
                if (this.transform.tag == "Enemy")
                {
                    DoOnDestroy();
                }
                else
                {
                    SendMsg((int)Const_Util.UNIT_MSG.COLLIDER_OCCUR, null);
                }
            }
            collisionCD = 1.0f;
        }
        else if (other.transform.tag == "Enemy")
        {
            SendMsg((int)Const_Util.UNIT_MSG.COLLIDER_OCCUR, null);
            collisionCD = 1.0f;
        }
    }