private void AutoAdjust() { if (_vrmRoot == null) { return; } var parameters = new AutoAdjustParameters(); //やること: //1. いま読まれてるモデルの体型からいろんなパラメータを決めてparametersに入れていく //2. 決定したパラメータが疑似的にメッセージハンドラから飛んできたことにして適用 //3. 決定したパラメータをコンフィグ側に送る try { var animator = _vrmRoot.GetComponent <Animator>(); //3つのサブルーチンではanimatorのHumanoidBoneを使うが、部位である程度分けられるので分けておく SetHandSizeRelatedParameters(animator, parameters); AdjustCameraPosition(animator); //デバイスレイアウト調整: これは別途調整が終わるとメッセージが飛ぶ _dispatcher.ReceiveCommand(new ReceivedCommand(VmmCommands.ResetDeviceLayout)); //3. 決定したパラメータをコンフィグ側に送る _sender.SendCommand(MessageFactory.Instance.AutoAdjustResults(parameters)); } catch (Exception ex) { LogOutput.Instance.Write(ex); } }
private void AutoAdjust() { if (_vrmRoot == null) { return; } var parameters = new AutoAdjustParameters(); //やること: //1. いま読まれてるモデルの体型からいろんなパラメータを決めてparametersに入れていく //2. 決定したパラメータが疑似的にメッセージハンドラから飛んできたことにして適用 //3. 決定したパラメータをコンフィグ側に送る try { var animator = _vrmRoot.GetComponent <Animator>(); //3つのサブルーチンではanimatorのHumanoidBoneを使うが、部位である程度分けられるので分けておく SetHandSizeRelatedParameters(animator, parameters); //眉毛はブレンドシェイプ SetEyebrowParameters(parameters); AdjustCameraPosition(animator); SendParameterRelatedCommands(parameters); //3. 決定したパラメータをコンフィグ側に送る sender.SendCommand(MessageFactory.Instance.AutoAdjustResults(parameters)); } catch (Exception ex) { LogOutput.Instance.Write(ex); } }
private void SendParameterRelatedCommands(AutoAdjustParameters parameters, bool onlyEyebrow) { var eyebrowCommands = new ReceivedCommand[] { new ReceivedCommand( MessageCommandNames.EyebrowLeftUpKey, parameters.EyebrowLeftUpKey ), new ReceivedCommand( MessageCommandNames.EyebrowLeftDownKey, parameters.EyebrowLeftDownKey ), new ReceivedCommand( MessageCommandNames.UseSeparatedKeyForEyebrow, $"{parameters.UseSeparatedKeyForEyebrow}" ), new ReceivedCommand( MessageCommandNames.EyebrowRightUpKey, parameters.EyebrowRightUpKey ), new ReceivedCommand( MessageCommandNames.EyebrowRightDownKey, parameters.EyebrowRightDownKey ), new ReceivedCommand( MessageCommandNames.EyebrowUpScale, $"{parameters.EyebrowUpScale}" ), new ReceivedCommand( MessageCommandNames.EyebrowDownScale, $"{parameters.EyebrowDownScale}" ), new ReceivedCommand( MessageCommandNames.LengthFromWristToPalm, $"{parameters.LengthFromWristToPalm}" ), new ReceivedCommand( MessageCommandNames.LengthFromWristToTip, $"{parameters.LengthFromWristToTip}" ), }; foreach (var cmd in eyebrowCommands) { handler.ReceiveCommand(cmd); } if (onlyEyebrow) { return; } //レイアウト調整はコレ一発でおしまいです handler.ReceiveCommand(new ReceivedCommand(MessageCommandNames.ResetDeviceLayout)); }
private void SetEyebrowParameters(AutoAdjustParameters parameters) { var blendShapeNames = blendShapeAssignReceiver.TryGetBlendShapeNames(); var adjuster = new EyebrowBlendShapeAdjuster(blendShapeNames); var settings = adjuster.CreatePreferredSettings(); parameters.EyebrowIsValidPreset = settings.IsValidPreset; parameters.EyebrowLeftUpKey = settings.EyebrowLeftUpKey; parameters.EyebrowLeftDownKey = settings.EyebrowLeftDownKey; parameters.UseSeparatedKeyForEyebrow = settings.UseSeparatedKeyForEyebrow; parameters.EyebrowRightUpKey = settings.EyebrowRightUpKey; parameters.EyebrowRightDownKey = settings.EyebrowRightDownKey; parameters.EyebrowUpScale = settings.EyebrowUpScale; parameters.EyebrowDownScale = settings.EyebrowDownScale; }
private void SetHandSizeRelatedParameters(Animator animator, AutoAdjustParameters parameters) { var tip = animator.GetBoneTransform(HumanBodyBones.RightMiddleDistal); if (tip == null) { return; } var wrist = animator.GetBoneTransform(HumanBodyBones.RightHand); float distance = Vector3.Distance(tip.position, wrist.position); float factor = distance / ReferenceHandLength; parameters.LengthFromWristToTip = (int)(parameters.LengthFromWristToTip * factor); }
private void AutoAdjustOnlyEyebrow() { if (_vrmRoot == null) { return; } var parameters = new AutoAdjustParameters(); try { SetEyebrowParameters(parameters); SendParameterRelatedCommands(parameters, true); sender.SendCommand(MessageFactory.Instance.AutoAdjustEyebrowResults(parameters)); } catch (Exception ex) { LogOutput.Instance.Write(ex); } }
private void SendParameterRelatedCommands(AutoAdjustParameters parameters) { SendParameterRelatedCommands(parameters, false); }
public Message AutoAdjustResults(AutoAdjustParameters parameters) => WithArg(JsonUtility.ToJson(parameters));