/** * Copyright(c) Live2D Inc. All rights reserved. * * Use of this source code is governed by the Live2D Open Software license * that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html. */ using Live2D.Cubism.Framework.Json; using UnityEngine; namespace Live2D.Cubism.Framework.MotionFade { public class CubismFadeMotionData : ScriptableObject { /// /// Name of motion. /// [SerializeField] public string MotionName; /// /// Time to fade in. /// [SerializeField] public float FadeInTime; /// /// Time to fade out. /// [SerializeField] public float FadeOutTime; /// /// Parameter ids. /// [SerializeField] public string[] ParameterIds; /// /// Parameter curves. /// [SerializeField] public AnimationCurve[] ParameterCurves; /// /// Fade in time parameters. /// [SerializeField] public float[] ParameterFadeInTimes; /// /// Fade out time parameters. /// [SerializeField] public float[] ParameterFadeOutTimes; /// /// Motion length. /// [SerializeField] public float MotionLength; /// /// Create CubismFadeMotionData from CubismMotion3Json. /// /// Motion3json as the creator. /// Motion name of interest. /// Length of target motion. /// Whether the original work flow or not. /// Whether it is a call from the model json. /// Fade data created based on motion3json. public static CubismFadeMotionData CreateInstance( CubismMotion3Json motion3Json, string motionName, float motionLength, bool shouldImportAsOriginalWorkflow = false, bool isCallFromModelJson = false) { var fadeMotion = CreateInstance(); var curveCount = motion3Json.Curves.Length; fadeMotion.ParameterIds = new string[curveCount]; fadeMotion.ParameterFadeInTimes = new float[curveCount]; fadeMotion.ParameterFadeOutTimes = new float[curveCount]; fadeMotion.ParameterCurves = new AnimationCurve[curveCount]; return CreateInstance(fadeMotion, motion3Json, motionName, motionLength, shouldImportAsOriginalWorkflow, isCallFromModelJson); } /// /// Put motion3json's fade information back into fade motion data. /// /// Instance containing fade information. /// Target motion3json. /// Motion name of interest. /// Motion length. /// Whether the original work flow or not. /// Whether it is a call from the model json. /// Fade data created based on fademotiondata. public static CubismFadeMotionData CreateInstance( CubismFadeMotionData fadeMotion, CubismMotion3Json motion3Json, string motionName, float motionLength, bool shouldImportAsOriginalWorkflow = false, bool isCallFormModelJson = false) { fadeMotion.MotionName = motionName; fadeMotion.MotionLength = motionLength; fadeMotion.FadeInTime = (motion3Json.Meta.FadeInTime < 0.0f) ? 1.0f : motion3Json.Meta.FadeInTime; fadeMotion.FadeOutTime = (motion3Json.Meta.FadeOutTime < 0.0f) ? 1.0f : motion3Json.Meta.FadeOutTime; for (var i = 0; i < motion3Json.Curves.Length; ++i) { var curve = motion3Json.Curves[i]; // In original workflow mode, skip add part opacity curve when call not from model3.json. if (curve.Target == "PartOpacity" && shouldImportAsOriginalWorkflow && !isCallFormModelJson) { continue; } fadeMotion.ParameterIds[i] = curve.Id; fadeMotion.ParameterFadeInTimes[i] = (curve.FadeInTime < 0.0f) ? -1.0f : curve.FadeInTime; fadeMotion.ParameterFadeOutTimes[i] = (curve.FadeOutTime < 0.0f) ? -1.0f : curve.FadeOutTime; fadeMotion.ParameterCurves[i] = new AnimationCurve(CubismMotion3Json.ConvertCurveSegmentsToKeyframes(curve.Segments)); } return fadeMotion; } } }