/// <summary>
        /// DynamicBoneを再設定する。ほぼオリジナルの処理のコピペ
        /// </summary>
        /// <param name="cc"></param>
        /// <param name="obj"></param>
        /// <param name="dictBone"></param>
        public void ForceRescueDynamicBone(ChaControl cc, GameObject obj, Dictionary <string, GameObject> dictBone)
        {
            var dbcs = cc.objBodyBone.GetComponentsInChildren <DynamicBoneCollider>(true);
            var dbs  = obj.GetComponentsInChildren <DynamicBone>(true);

            foreach (var db in dbs)
            {
                if (db.m_Root != null && !BoneImplantMarker.IsMarked(db.m_Root))
                {
                    foreach (var kvp in dictBone)
                    {
                        if (kvp.Key == db.m_Root.name)
                        {
                            db.m_Root = kvp.Value.transform;
                            break;
                        }
                    }
                }
                if (db.m_Exclusions != null && db.m_Exclusions.Count > 0)
                {
                    for (int i = 0; i < db.m_Exclusions.Count; i++)
                    {
                        if (db.m_Exclusions[i] != null && !BoneImplantMarker.IsMarked(db.m_Exclusions[i]))
                        {
                            foreach (var kvp in dictBone)
                            {
                                if (kvp.Key == db.m_Exclusions[i].name)
                                {
                                    db.m_Exclusions[i] = kvp.Value.transform;
                                    break;
                                }
                            }
                        }
                    }
                }
                if (db.m_notRolls != null && db.m_notRolls.Count != 0)
                {
                    for (int i = 0; i < db.m_notRolls.Count; i++)
                    {
                        if (db.m_notRolls[i] != null && !BoneImplantMarker.IsMarked(db.m_notRolls[i]))
                        {
                            foreach (var kvp in dictBone)
                            {
                                if (kvp.Key == db.m_notRolls[i].name)
                                {
                                    db.m_notRolls[i] = kvp.Value.transform;
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// ボーン参照を移し替える実処理。AssignedAnotherWeights.AssignedWeightsAndSetBoundsLoopの置き換え
        /// </summary>
        /// <param name="t"></param>
        /// <param name="bounds"></param>
        /// <param name="rootBone"></param>
        /// <param name="dictBone"></param>
        private void TransferBoneReferenceLoop(Transform t, Bounds bounds, Transform rootBone, Dictionary <string, GameObject> dictBone)
        {
            var smr = t.GetComponent <SkinnedMeshRenderer>();

            if (smr != null)
            {
                var        num      = smr.bones.Length;
                var        tmpArray = new Transform[num];
                GameObject obj      = null;
                for (var i = 0; i < num; i++)
                {
                    if (BoneImplantMarker.IsMarked(smr.bones[i]))
                    {
                        tmpArray[i] = smr.bones[i];
                    }
                    else if (dictBone.TryGetValue(smr.bones[i].name, out obj))
                    {
                        tmpArray[i] = obj.transform;
                    }
                }

                smr.bones       = tmpArray;
                smr.localBounds = bounds;

                var c = smr.gameObject.GetComponent <Cloth>();
                if (rootBone != null && c == null)
                {
                    smr.rootBone = rootBone;
                }
                else if (smr.rootBone != null && dictBone.TryGetValue(smr.rootBone.name, out obj))
                {
                    smr.rootBone = obj.transform;
                }
            }

            IEnumerator enumerator = t.gameObject.transform.GetEnumerator();

            try
            {
                while (enumerator.MoveNext())
                {
                    var t2 = (Transform)enumerator.Current;
                    TransferBoneReferenceLoop(t2, bounds, rootBone, dictBone);
                }
            }
            finally
            {
                IDisposable disposable;
                if ((disposable = (enumerator as IDisposable)) != null)
                {
                    disposable.Dispose();
                }
            }
        }