void CheckValid()
        {
            if (string.IsNullOrEmpty(avatarName))
            {
                Debug.LogErrorFormat("AliceMotion: {0} , not set avatarName; avatarName should be same as actor name in trance", gameObject.name);
            }

            //bool isHumanRigAvatar = false;
            //if (animator != null && animator.avatar != null)
            //{
            //    isHumanRigAvatar = animator.avatar.isHuman;
            //    Debug.LogWarningFormat("{0} has animator component, it's a humenrig avatar , ignore auto bind", gameObject.name);
            //}

            //// bind transform by name
            //if (!isHumanRigAvatar)
            {
                usingHumanRig = false;
                int bindCount = AliceMotionBindHelper.Bind(transform, transforms, prefix);
                if (bindCount != (int)InertialBones.NumOfBones)
                {
                    Debug.LogErrorFormat("some of alice motion bone can't find, wanted:{0}, found:{1}", (int)InertialBones.NumOfBones, bindCount);
                }
                else
                {
                    Debug.LogFormat("{0} bind avatar success!", gameObject.name);
                }
            }
        }
        public bool Bind(Transform root, string prefix)
        {
            this.root   = root;
            this.prefix = prefix;
            int bound_count = AliceMotionBindHelper.Bind(transform, transforms, prefix);

            boundTransforms = bound_count >= (int)InertialBones.NumOfBones;
            UpdateOffset();
            return(boundTransforms);
        }