Beispiel #1
0
        private void OnVrmLoaded(VrmLoadedInfo info)
        {
            _ik = info.vrmRoot.GetComponent <FullBodyBipedIK>();
            var spineBone = info.animator.GetBoneTransform(HumanBodyBones.Spine);

            _rightArmBendGoal = new GameObject().transform;
            _rightArmBendGoal.SetParent(spineBone);
            _rightArmBendGoal.localRotation = Quaternion.identity;
            _ik.solver.rightArmChain.bendConstraint.bendGoal = _rightArmBendGoal;

            _leftArmBendGoal = new GameObject().transform;
            _leftArmBendGoal.SetParent(spineBone);
            _leftArmBendGoal.localRotation = Quaternion.identity;
            _ik.solver.leftArmChain.bendConstraint.bendGoal = _leftArmBendGoal;

            _isInitialized = true;
        }
        private void OnVrmLoaded(VrmLoadedInfo info)
        {
            _blendShapeProxy = info.blendShape;
            _rightEyeBone    = info.animator.GetBoneTransform(HumanBodyBones.RightEye);
            _leftEyeBone     = info.animator.GetBoneTransform(HumanBodyBones.LeftEye);

            _rightEyeBrowHeight?.Dispose();
            _rightEyeBrowHeight         = _faceTracker.FaceParts.RightEyebrow.Height.Subscribe(
                v => _rightEyeBrowValue = v
                );

            _leftEyeBrowHeight?.Dispose();
            _leftEyeBrowHeight         = _faceTracker.FaceParts.LeftEyebrow.Height.Subscribe(
                v => _leftEyeBrowValue = v
                );

            _hasValidEyeSettings =
                _rightEyeBone != null &&
                _leftEyeBone != null &&
                CheckBlinkBlendShapeClips(_blendShapeProxy);

            IsInitialized = true;
        }
 private void OnVrmLoaded(VrmLoadedInfo info)
 {
     _rightEye        = info.animator.GetBoneTransform(HumanBodyBones.RightEye);
     _leftEye         = info.animator.GetBoneTransform(HumanBodyBones.LeftEye);
     _hasValidEyeBone = (_rightEye != null && _leftEye != null);
 }
        private void OnVrmLoaded(VrmLoadedInfo info)
        {
            _animator         = info.animator;
            _humanPoseHandler = new HumanPoseHandler(_animator.avatar, _animator.transform);
            //とりあえず現在の値を拾っておく
            _humanPoseHandler.GetHumanPose(ref _humanPose);
            _defaultHumanPose = _humanPose;

            for (int i = 0; i < 10; i++)
            {
                _hold[i]         = false;
                _targetAngles[i] = DefaultBendingAngle;
            }

            _fingers = new Transform[][]
            {
                new Transform[]
                {
                    _animator.GetBoneTransform(HumanBodyBones.LeftThumbDistal),
                    _animator.GetBoneTransform(HumanBodyBones.LeftThumbIntermediate),
                    _animator.GetBoneTransform(HumanBodyBones.LeftThumbProximal),
                },
                new Transform[]
                {
                    _animator.GetBoneTransform(HumanBodyBones.LeftIndexDistal),
                    _animator.GetBoneTransform(HumanBodyBones.LeftIndexIntermediate),
                    _animator.GetBoneTransform(HumanBodyBones.LeftIndexProximal),
                },
                new Transform[]
                {
                    _animator.GetBoneTransform(HumanBodyBones.LeftMiddleDistal),
                    _animator.GetBoneTransform(HumanBodyBones.LeftMiddleIntermediate),
                    _animator.GetBoneTransform(HumanBodyBones.LeftMiddleProximal),
                },
                new Transform[]
                {
                    _animator.GetBoneTransform(HumanBodyBones.LeftRingDistal),
                    _animator.GetBoneTransform(HumanBodyBones.LeftRingIntermediate),
                    _animator.GetBoneTransform(HumanBodyBones.LeftRingProximal),
                },
                new Transform[]
                {
                    _animator.GetBoneTransform(HumanBodyBones.LeftLittleDistal),
                    _animator.GetBoneTransform(HumanBodyBones.LeftLittleIntermediate),
                    _animator.GetBoneTransform(HumanBodyBones.LeftLittleProximal),
                },
                new Transform[]
                {
                    _animator.GetBoneTransform(HumanBodyBones.RightThumbDistal),
                    _animator.GetBoneTransform(HumanBodyBones.RightThumbIntermediate),
                    _animator.GetBoneTransform(HumanBodyBones.RightThumbProximal),
                },
                new Transform[]
                {
                    _animator.GetBoneTransform(HumanBodyBones.RightIndexDistal),
                    _animator.GetBoneTransform(HumanBodyBones.RightIndexIntermediate),
                    _animator.GetBoneTransform(HumanBodyBones.RightIndexProximal),
                },
                new Transform[]
                {
                    _animator.GetBoneTransform(HumanBodyBones.RightMiddleDistal),
                    _animator.GetBoneTransform(HumanBodyBones.RightMiddleIntermediate),
                    _animator.GetBoneTransform(HumanBodyBones.RightMiddleProximal),
                },
                new Transform[]
                {
                    _animator.GetBoneTransform(HumanBodyBones.RightRingDistal),
                    _animator.GetBoneTransform(HumanBodyBones.RightRingIntermediate),
                    _animator.GetBoneTransform(HumanBodyBones.RightRingProximal),
                },
                new Transform[]
                {
                    _animator.GetBoneTransform(HumanBodyBones.RightLittleDistal),
                    _animator.GetBoneTransform(HumanBodyBones.RightLittleIntermediate),
                    _animator.GetBoneTransform(HumanBodyBones.RightLittleProximal),
                },
            };
        }
Beispiel #5
0
 public void OnVrmLoaded(VrmLoadedInfo info)
 {
     InitializeBlendShapeItems(info.vrmRoot);
     IsInitialized = true;
 }
Beispiel #6
0
        private async void OnVRMLoaded(VrmLoadedInfo vrm)
        {
            var lookAtHead          = vrm.vrmRoot.GetComponent <VRMLookAtHead>();
            var lookAtIk            = vrm.vrmRoot.GetComponent <LookAtIK>();
            var bodyIK              = vrm.vrmRoot.GetComponent <FullBodyBipedIK>();
            var initialHeadIkTarget = lookAtHead.Target;
            var animator            = vrm.animator;

            _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(MessageCommandNames.AutoBlinkDuringFaceTracking, false.ToString()));

            //レイアウト調整
            _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(MessageCommandNames.RequestAutoAdjust));
            _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(MessageCommandNames.RequestAutoAdjustEyebrow));

            await Task.Delay(300);

            vrm.context.ShowMeshes();
            _isInitialized = true;

            cameraControlEnabled.onValueChanged.AddListener(value =>
            {
                _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(MessageCommandNames.CameraControl, value.ToString()));
            });

            backgroundImageWidthEnabled.onValueChanged.AddListener(value =>
            {
                _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(MessageCommandNames.ChangeBackgroundImageDirection, value.ToString()));
            });

            backgroundTransparentEnabled.onValueChanged.AddListener((value) =>
            {
                _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(MessageCommandNames.ChangeBackground, value.ToString()));
            });

            var firstPerson = vrm.vrmRoot.GetComponent <VRMFirstPerson>();

            //アバターの目線位置に合わせる
            desktopShareEnabled.onValueChanged.AddListener((value) =>
            {
                if (!value)
                {
                    SetVideoChatMode(lookAtHead, lookAtIk, firstPerson);
                }
                else
                {
                    lookAtHead.Target      = initialHeadIkTarget;
                    lookAtIk.solver.target = lookAtHead.Target;
                    _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(MessageCommandNames.RequestAutoAdjust));
                    _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(MessageCommandNames.RequestAutoAdjustEyebrow));
                    _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(MessageCommandNames.EnableDesktopShareMode, true.ToString()));
                }

                lookAtIk.enabled = value;
                bodyIK.enabled   = value;
                animator.SetBool(_hashWaiting, !value);
            });

            faceTrackingEnabled.onValueChanged.AddListener((value) =>
            {
                if (value)
                {
                    var device = faceTrackingDevices.options[faceTrackingDevices.value].text;
                    _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(
                                                               MessageCommandNames.SetCameraDeviceName, device)
                                                           );
                    _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(
                                                               MessageCommandNames.EnableFaceTracking, true.ToString())
                                                           );
                }
                else
                {
                    _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(
                                                               MessageCommandNames.EnableFaceTracking, false.ToString())
                                                           );
                }
            });

            handTrackingEnabled.onValueChanged.AddListener((value) =>
            {
                _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(
                                                           MessageCommandNames.EnableImageBasedHandTracking, value.ToString())
                                                       );
            });

            handTrackingEnabled.onValueChanged.AddListener((value) =>
            {
                _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(
                                                           MessageCommandNames.EnableImageBasedHandTracking, value.ToString())
                                                       );
            });

            voiceLipSyncEnabled.onValueChanged.AddListener((value) =>
            {
                if (value)
                {
                    var device = microphoneDevices.options[microphoneDevices.value].text;
                    _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(
                                                               MessageCommandNames.SetMicrophoneDeviceName, device)
                                                           );
                    _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(
                                                               MessageCommandNames.EnableLipSync, true.ToString())
                                                           );
                }
                else
                {
                    _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(
                                                               MessageCommandNames.EnableLipSync, false.ToString())
                                                           );
                }
            });

            foreach (var device in WebCamTexture.devices)
            {
                faceTrackingDevices.options.Add(new Dropdown.OptionData(device.name));
            }

            //フェイストラッキングはデフォルトで有効
            faceTrackingDevices.value = faceTrackingDevices.options.FindIndex(c => c.text.StartsWith("FaceTime"));
            faceTrackingDevices.RefreshShownValue();
            var cameraDevice = faceTrackingDevices.options[faceTrackingDevices.value].text;

            _receivedMessageHandler.ReceiveCommand(new ReceivedCommand(
                                                       MessageCommandNames.SetCameraDeviceName, cameraDevice)
                                                   );

            foreach (var device in Microphone.devices)
            {
                microphoneDevices.options.Add(new Dropdown.OptionData(device));
            }
            microphoneDevices.value = 0;
            microphoneDevices.RefreshShownValue();

            SetVideoChatMode(lookAtHead, lookAtIk, firstPerson);
        }
Beispiel #7
0
 private void OnVrmLoaded(VrmLoadedInfo info)
 {
     _head = info.animator.GetBoneTransform(HumanBodyBones.Head);
     _headYawAngleDegree = 0;
     _hasVrmBone         = true;
 }