コード例 #1
0
        /// <summary>
        /// オートアイムーブメントが有効化される条件が揃っていれば、目ボーンの関連付けを外します。
        /// </summary>
        /// <param name="avatar"></param>
        private static void DisableAutoEyeMovement(GameObject avatar)
        {
            if (!VRChatUtility.IsEnabledAutoEyeMovementInSDK2(avatar))
            {
                return;
            }

            var eyeBones = new[] { HumanBodyBones.RightEye, HumanBodyBones.LeftEye }
            .Select(id => avatar.GetComponent <Animator>().GetBoneTransform(id))
            .Where(bone => bone);

            if (eyeBones.Count() == 0)
            {
                return;
            }

            AvatarDescription avatarDescription = avatar.GetComponent <VRMHumanoidDescription>().Description;

            var boneLimits = avatarDescription.human.ToList();

            foreach (Transform bone in eyeBones)
            {
                var index = boneLimits.FindIndex(match: limit => limit.boneName == bone.name);
                bone.name = bone.name.ToLower();
                BoneLimit boneLimit = boneLimits[index];
                boneLimit.boneName = bone.name;
                boneLimits[index]  = boneLimit;
            }

            avatarDescription.human = boneLimits.ToArray();
            ApplyAvatarDescription(avatar: avatar);
        }
コード例 #2
0
        /// <summary>
        /// オートアイムーブメントが有効化される条件が揃っていれば、目ボーンの関連付けを外します。
        /// </summary>
        /// <param name="avatar"></param>
        private static void DisableAutoEyeMovement(GameObject avatar)
        {
            var paths      = VRChatUtility.RequiredPathForAutoEyeMovement.Concat(new string[] { VRChatUtility.AutoBlinkMeshPath });
            var transforms = paths.Concat(new string[] { VRChatUtility.AutoBlinkMeshPath }).Select(path => avatar.transform.Find(path));

            if (transforms.Contains(value: null))
            {
                return;
            }

            var  renderer = avatar.transform.Find(VRChatUtility.AutoBlinkMeshPath).gameObject.GetOrAddComponent <SkinnedMeshRenderer>();
            Mesh mesh     = renderer.sharedMesh;

            if (!mesh || mesh.blendShapeCount < BlendShapeReplacer.OrderedBlinkGeneratedByCatsBlenderPlugin.Count())
            {
                return;
            }

            var eyeBones = new[] { HumanBodyBones.RightEye, HumanBodyBones.LeftEye }
            .Select(id => avatar.GetComponent <Animator>().GetBoneTransform(id))
            .Where(bone => bone && transforms.Contains(value: bone));

            if (eyeBones.Count() == 0)
            {
                return;
            }

            AvatarDescription avatarDescription = avatar.GetComponent <VRMHumanoidDescription>().Description;

            var boneLimits = avatarDescription.human.ToList();

            foreach (Transform bone in eyeBones)
            {
                int index = boneLimits.FindIndex(match: limit => limit.boneName == bone.name);
                bone.name = bone.name.ToLower();
                BoneLimit boneLimit = boneLimits[index];
                boneLimit.boneName = bone.name;
                boneLimits[index]  = boneLimit;
            }

            avatarDescription.human = boneLimits.ToArray();
            ApplyAvatarDescription(avatar: avatar);
        }