private void AddAttachObject(Collider collider)
        {
            GameObject parent = m_ColliderInfo.GetCollider();

            if (parent == null)
            {
                return;
            }
            AttachConfig     attach_config = m_ColliderInfo.GetAttachConfig();
            AttachTargetInfo attach_info   = new AttachTargetInfo();

            attach_info.ParentObj  = parent;
            attach_info.TargetObj  = collider.gameObject;
            attach_info.AttachNode = TriggerUtil.GetChildNodeByName(collider.gameObject,
                                                                    attach_config.AttachNodeName);

            UnityEngine.Vector3 hit_pos = parent.GetComponent <Collider>().ClosestPointOnBounds(attach_info.AttachNode.position);
            attach_info.ParentPos     = attach_info.ParentObj.transform.InverseTransformPoint(hit_pos);
            attach_info.Rotate        = attach_config.AttachRotation;
            attach_info.MoveControler = attach_info.TargetObj.GetComponent <CharacterController>();
            m_AttachedObjects.Add(attach_info);
            UpdateAttachTargetPos(attach_info);
            LogicSystem.NotifyGfxMoveControlStart(attach_info.TargetObj, m_OwnSkill.SkillId, true);
            //Debug.Log("---AttachImpact: send " + attach_config.AttachImpact + " to " + attach_info.TargetObj.name);
            m_DamageManager.SendImpactToObject(m_DamageManager.GetOwner(),
                                               collider.gameObject, attach_config.AttachImpact,
                                               attach_config.AttachImpactTime,
                                               m_OwnSkill.SkillId, m_CurHitCountId);
        }
        private void SendFinalImpact()
        {
            AttachConfig attach_config = m_ColliderInfo.GetAttachConfig();

            UpdateHitCount();
            for (int i = m_AttachedObjects.Count - 1; i >= 0; --i)
            {
                AttachTargetInfo ati = m_AttachedObjects[i];
                if (ati.ParentObj != null)
                {
                    //Debug.Log("---FinalImpact: send " + attach_config.FinalImpact + " to " + ati.TargetObj.name);
                    m_DamageManager.SendImpactToObject(m_DamageManager.GetOwner(),
                                                       ati.TargetObj, attach_config.FinalImpact,
                                                       attach_config.FinalImpactTime,
                                                       m_OwnSkill.SkillId, m_CurHitCountId);
                }
            }
        }
        private void UpdateAttachObjects()
        {
            AttachConfig attach_config = m_ColliderInfo.GetAttachConfig();

            for (int i = m_AttachedObjects.Count - 1; i >= 0; --i)
            {
                AttachTargetInfo ati = m_AttachedObjects[i];
                if (ati.ParentObj != null)
                {
                    if (!UpdateAttachTargetPos(ati))
                    {
                        m_AttachedObjects.RemoveAt(i);
                        //Debug.Log("---FallImpact: send to " + ati.TargetObj.name);
                        m_DamageManager.SendImpactToObject(m_DamageManager.GetOwner(),
                                                           ati.TargetObj, attach_config.FallImpact, attach_config.FallImpactTime,
                                                           m_OwnSkill.SkillId, m_CurHitCountId);
                    }
                }
            }
        }