private IEnumerator TryMerge(ChaControl _chaControl)
 {
     if (ReferenceEquals(_chaControl, null) || !SkinnedBones.TryGetSkinnedBones(_chaControl, out var dict))
     {
         yield break;
     }
     meshRenderers.ForEach(smr =>
     {
         smr.enabled  = false;
         smr.rootBone = _chaControl.objBodyBone.transform;
         StartCoroutine(MergeCoroutine(smr, dict));
     });
 }
    private IEnumerator TryMerge()
    {
        var startTime = Time.time;

        yield return(new WaitUntil(() => _chaControl != null || Time.time - startTime > 100));

        // TryGetSkinnedBones includes dictionary check and chaControl checks.
        if (ReferenceEquals(_chaControl, null) || !SkinnedBones.TryGetSkinnedBones(_chaControl, out var dict))
        {
            yield break;
        }
        meshRenderers.ForEach(smr =>
        {
            smr.enabled  = false;
            smr.rootBone = _chaControl.objBodyBone.transform;
            StartCoroutine(MergeCoroutine(smr, dict));
        });
    }