using System; using UnityEngine; public class OVRLipSyncContextMorphTarget : MonoBehaviour { public void Init(Maid maid) { if (this.skinnedMeshRenderer == null) { Debug.Log("LipSyncContextMorphTarget.Start WARNING: Please set required public components!"); } this.lipsyncContext = base.GetComponent(); if (this.lipsyncContext == null) { Debug.Log("LipSyncContextMorphTarget.Start WARNING: No phoneme context component set to object"); return; } this.TargetMaid = maid; this.lipsyncContext.Smoothing = this.SmoothAmount; } private void Update() { if (!this.lipsyncContext) { return; } OVRLipSync.Frame currentPhonemeFrame = this.lipsyncContext.GetCurrentPhonemeFrame(); if (currentPhonemeFrame == null) { return; } if (this.TargetMaid) { this.SetMaidKuchiPaku(currentPhonemeFrame); } else if (this.skinnedMeshRenderer != null) { this.SetVisemeToMorphTarget(currentPhonemeFrame); } } private void SetMaidKuchiPaku(OVRLipSync.Frame frame) { if (GameMain.Instance.CharacterMgr.IsBusy()) { return; } this.TargetMaid.body0.Face.morph.boLipSync = true; this.TargetMaid.body0.Face.morph.LipSync1 = 0f; this.TargetMaid.body0.Face.morph.LipSync2 = 0f; this.TargetMaid.body0.Face.morph.LipSync3 = 0f; int num = 0; float num2 = -1f; for (int i = 0; i < OVRLipSync.VisemeCount; i++) { if (frame.Visemes[i] > 0.001f) { if (frame.Visemes[i] > num2 && i != 0) { num2 = frame.Visemes[i]; num = i; } if (this.m_blendMorph) { this.TargetMaid.body0.Face.morph.LipSync1 += GameMain.Instance.LipSyncMgr.GetMorphData(i).LipSync1 * frame.Visemes[i]; this.TargetMaid.body0.Face.morph.LipSync2 += GameMain.Instance.LipSyncMgr.GetMorphData(i).LipSync2 * frame.Visemes[i]; this.TargetMaid.body0.Face.morph.LipSync3 += GameMain.Instance.LipSyncMgr.GetMorphData(i).LipSync3 * frame.Visemes[i]; } } } if (!this.m_blendMorph) { this.TargetMaid.body0.Face.morph.LipSync1 = GameMain.Instance.LipSyncMgr.GetMorphData(num).LipSync1 * frame.Visemes[num]; this.TargetMaid.body0.Face.morph.LipSync2 = GameMain.Instance.LipSyncMgr.GetMorphData(num).LipSync2 * frame.Visemes[num]; this.TargetMaid.body0.Face.morph.LipSync3 = GameMain.Instance.LipSyncMgr.GetMorphData(num).LipSync3 * frame.Visemes[num]; } this.m_nViseme = (OVRLipSync.Viseme)num; } private void SetVisemeToMorphTarget(OVRLipSync.Frame frame) { for (int i = 0; i < this.VisemeToBlendTargets.Length; i++) { if (this.VisemeToBlendTargets[i] != -1) { this.skinnedMeshRenderer.SetBlendShapeWeight(this.VisemeToBlendTargets[i], frame.Visemes[i] * 100f); } } } public SkinnedMeshRenderer skinnedMeshRenderer; public Maid TargetMaid; public int[] VisemeToBlendTargets = new int[OVRLipSync.VisemeCount]; public bool enableVisemeSignals; public int[] KeySendVisemeSignal = new int[10]; public int SmoothAmount = 100; [SerializeField] [Header("口パクを複数ブレンドするか")] private bool m_blendMorph = true; private OVRLipSyncContextBase lipsyncContext; [SerializeField] private OVRLipSync.Viseme m_nViseme; }