質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

474閲覧

スマホ上でLive2Dを動かすアプリケーションをUnityで作っていますが、モーションがブレブレになってしまいます。

rinrinsan

総合スコア6

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/02/02 12:06

編集2020/02/02 12:08

下記のサイトを参考にしてスマホアプリをつくりました。
https://medium.com/@welchizm/%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8Bvtuber%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86-live2d%E7%B7%A8-917eb5208ffe

サイト通りに作ると綺麗に動くのですが、これをさらに拡張して、まぶたの開け閉めの動きのスクリプトを追加したところ、アバターの動きがカクカクしたり、動いていない時にブレてしまう現象が起きるようになりました。
原因がわかる方がいらっしゃいましたら解決策を教えていただきたいです。
自分が追加したのは以下のコードです。
どうぞよろしくお願い他します。

C#

1using UnityEngine; 2using Live2D.Cubism.Core; 3 4public class EyeOpenParam : MonoBehaviour 5{ 6 [SerializeField] DlibWebCamFaceDetector faceDetector; 7 [SerializeField] CubismParameter eyeOpenParameterL; 8 [SerializeField] CubismParameter eyeOpenParameterR; 9 [SerializeField] float lerpT = 2f; 10 private float _eyeOpenL; 11 private float _eyeOpenR; 12 13 private float countL = 0; 14 private float countR = 0; 15 16 private void LateUpdate() 17 { 18 var landmarks = faceDetector.Landmarks; 19 20 // まぶたの開き(L 左) 21 float distanceOfEyeHeightL = new Vector2(landmarks[38].x - landmarks[42].x, landmarks[38].y - landmarks[42].y) 22 .sqrMagnitude; 23 float distanceEyesDotsL = new Vector2(landmarks[41].x - landmarks[42].x, landmarks[41].y - landmarks[42].y) 24 .sqrMagnitude; 25 // ゼロ除算対策 26 if (distanceEyesDotsL != 0) 27 { 28 float ratio = distanceOfEyeHeightL / distanceEyesDotsL; 29 float currentEyeOpenL = Mathf.InverseLerp(0.2f, 0.6f, ratio); 30 31 countL = Mathf.Clamp(Mathf.Abs(landmarks[43].y - landmarks[47].y) / (Mathf.Abs(landmarks[43].x - landmarks[44].x) * 0.75f), -0.1f, 1.2f); 32 33 } 34 // まぶたの開き(R 右) 35 float distanceOfEyeHeightR = new Vector2(landmarks[45].x - landmarks[47].x, landmarks[45].y - landmarks[47].y) 36 .sqrMagnitude; 37 float distanceEyesDotsR = new Vector2(landmarks[48].x - landmarks[47].x, landmarks[48].y - landmarks[47].y) 38 .sqrMagnitude; 39 // ゼロ除算対策 40 if (distanceEyesDotsR != 0) 41 { 42 float ratio = distanceOfEyeHeightR / distanceEyesDotsR; 43 float currentEyeOpenR = Mathf.InverseLerp(0.2f, 0.6f, ratio); 44 45 countR = Mathf.Clamp(Mathf.Abs(landmarks[38].y - landmarks[40].y) / (Mathf.Abs(landmarks[37].x - landmarks[38].x) * 0.75f), -0.1f, 1.2f); 46 47 } 48 SetParameter(eyeOpenParameterL, _eyeOpenL); 49 SetParameter(eyeOpenParameterR, _eyeOpenR); 50 } 51 52 void SetParameter(CubismParameter parameter, float value) 53 { 54 if (parameter != null) 55 { 56 parameter.Value = Mathf.Clamp(value, parameter.MinimumValue, parameter.MaximumValue); 57 } 58 } 59}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問