下記のサイトを参考にしてスマホアプリをつくりました。
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}
あなたの回答
tips
プレビュー