using System; using System.Collections.Generic; using UnityEngine; namespace VRM { [DisallowMultipleComponent] public class VRMBlendShapeProxy : MonoBehaviour, IVRMComponent { [SerializeField] public BlendShapeAvatar BlendShapeAvatar; public void OnImported(VRMImporterContext context) { throw new NotImplementedException(); } BlendShapeMerger m_merger; private void OnDestroy() { if (m_merger != null) { m_merger.RestoreMaterialInitialValues(BlendShapeAvatar.Clips); } } private void Start() { if (BlendShapeAvatar != null) { if (m_merger == null) { m_merger = new BlendShapeMerger(BlendShapeAvatar.Clips, transform); } } } /// /// Set a blendShape value immediate /// /// /// public void SetValue(BlendShapePreset key, float value) { #pragma warning disable 0618 SetValue(new BlendShapeKey(key), value, true); #pragma warning restore 0618 } /// /// Set a blendShape value immediate or delayed. /// /// /// /// immediate if true [Obsolete("Use SetValues")] public void SetValue(BlendShapePreset key, float value, bool apply) { SetValue(new BlendShapeKey(key), value, apply); } /// /// Get a blendShape value /// /// /// public float GetValue(BlendShapePreset key) { return GetValue(new BlendShapeKey(key)); } /// /// Set a blendShape value immediate /// /// /// public void SetValue(String key, float value) { #pragma warning disable 0618 SetValue(new BlendShapeKey(key), value, true); #pragma warning restore 0618 } /// /// Set a blendShape value immediate or delayed. /// /// /// /// immediate if true [Obsolete("Use SetValues")] public void SetValue(String key, float value, bool apply) { SetValue(new BlendShapeKey(key), value, apply); } /// /// Get a blendShape value /// /// /// public float GetValue(String key) { return GetValue(new BlendShapeKey(key)); } /// /// Set a blendShape value immediate or delayed. /// /// /// /// immediate if true [Obsolete("Use SetValues")] public void SetValue(BlendShapeKey key, float value, bool apply) { if (m_merger != null) { m_merger.SetValue(key, value, apply); } } /// /// Set a blendShape value immediate /// /// /// public void SetValue(BlendShapeKey key, float value) { if (m_merger != null) { m_merger.SetValue(key, value, true); } } /// /// Get a blendShape value /// /// /// public float GetValue(BlendShapeKey key) { if (m_merger == null) { return 0; } return m_merger.GetValue(key); } /// /// Set blendShape values immediate. /// /// public void SetValues(IEnumerable> values) { if (m_merger != null) { m_merger.SetValues(values); } } /// /// Clear all blendShape values /// public void ClearKeys() { if (m_merger != null) { m_merger.Clear(); } } /// /// Apply blendShape values that use SetValue apply=false /// public void Apply() { if (m_merger != null) { m_merger.Apply(); } } } }