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);
        }
        /// <summary>
        /// Create oldFadeMotion.
        /// </summary>
        /// <param name="importer">Event source.</param>
        /// <param name="animationClip">Imported motion.</param>
        private static void OnFadeMotionImport(CubismMotion3JsonImporter importer, AnimationClip animationClip)
        {
            var directoryPath = Path.GetDirectoryName(importer.AssetPath) + "/";

            var oldFadeMotion = AssetDatabase.LoadAssetAtPath <CubismFadeMotionData>(importer.AssetPath.Replace(".motion3.json", ".fade.asset"));

            // Create fade motion.
            CubismFadeMotionData fadeMotion;

            if (oldFadeMotion == null)
            {
                // Create fade motion instance.
                fadeMotion = CubismFadeMotionData.CreateInstance(
                    importer.Motion3Json,
                    importer.AssetPath.Replace(directoryPath, ""),
                    animationClip.length,
                    CubismUnityEditorMenu.ShouldImportAsOriginalWorkflow,
                    CubismUnityEditorMenu.ShouldClearAnimationCurves);

                AssetDatabase.CreateAsset(
                    fadeMotion,
                    importer.AssetPath.Replace(".motion3.json", ".fade.asset"));
            }
            else
            {
                fadeMotion = CubismFadeMotionData.CreateInstance(
                    oldFadeMotion,
                    importer.Motion3Json,
                    importer.AssetPath.Replace(directoryPath, ""),
                    animationClip.length,
                    CubismUnityEditorMenu.ShouldImportAsOriginalWorkflow,
                    CubismUnityEditorMenu.ShouldClearAnimationCurves);

                EditorUtility.CopySerialized(fadeMotion, oldFadeMotion);
            }

            EditorUtility.SetDirty(fadeMotion);


            // Add reference of motion for Fade to list.
            var directoryName      = Path.GetDirectoryName(importer.AssetPath).ToString();
            var modelDir           = Path.GetDirectoryName(directoryName).ToString();
            var modelName          = Path.GetFileName(modelDir).ToString();
            var fadeMotionListPath = Path.GetDirectoryName(directoryName).ToString() + "/" + modelName + ".fadeMotionList.asset";
            var fadeMotions        = AssetDatabase.LoadAssetAtPath <CubismFadeMotionList>(fadeMotionListPath);

            // Create reference list.
            if (fadeMotions == null)
            {
                fadeMotions = ScriptableObject.CreateInstance <CubismFadeMotionList>();
                fadeMotions.MotionInstanceIds       = new int[0];
                fadeMotions.CubismFadeMotionObjects = new CubismFadeMotionData[0];
                AssetDatabase.CreateAsset(fadeMotions, fadeMotionListPath);
            }


            var instanceId  = animationClip.GetInstanceID();
            var motionIndex = Array.IndexOf(fadeMotions.MotionInstanceIds, instanceId);

            if (motionIndex != -1)
            {
                fadeMotions.CubismFadeMotionObjects[motionIndex] = fadeMotion;
            }
            else
            {
                motionIndex = fadeMotions.MotionInstanceIds.Length;

                Array.Resize(ref fadeMotions.MotionInstanceIds, motionIndex + 1);
                fadeMotions.MotionInstanceIds[motionIndex] = instanceId;

                Array.Resize(ref fadeMotions.CubismFadeMotionObjects, motionIndex + 1);
                fadeMotions.CubismFadeMotionObjects[motionIndex] = fadeMotion;
            }

            EditorUtility.SetDirty(fadeMotions);

            // Add animation event
            {
                var sourceAnimationEvents = AnimationUtility.GetAnimationEvents(animationClip);
                var index = -1;

                for (var i = 0; i < sourceAnimationEvents.Length; ++i)
                {
                    if (sourceAnimationEvents[i].functionName != "InstanceId")
                    {
                        continue;
                    }

                    index = i;
                    break;
                }

                if (index == -1)
                {
                    index = sourceAnimationEvents.Length;
                    Array.Resize(ref sourceAnimationEvents, sourceAnimationEvents.Length + 1);
                    sourceAnimationEvents[sourceAnimationEvents.Length - 1] = new AnimationEvent();
                }

                sourceAnimationEvents[index].time           = 0;
                sourceAnimationEvents[index].functionName   = "InstanceId";
                sourceAnimationEvents[index].intParameter   = instanceId;
                sourceAnimationEvents[index].messageOptions = SendMessageOptions.DontRequireReceiver;

                AnimationUtility.SetAnimationEvents(animationClip, sourceAnimationEvents);
            }
        }
示例#3
0
        /// <summary>
        /// Create oldFadeMotion.
        /// </summary>
        /// <param name="importer">Event source.</param>
        /// <param name="animationClip">Imported motion.</param>
        private static void OnFadeMotionImport(CubismMotion3JsonImporter importer, AnimationClip animationClip)
        {
            var directoryPath = Path.GetDirectoryName(importer.AssetPath) + "/";

            var oldFadeMotion = AssetDatabase.LoadAssetAtPath <CubismFadeMotionData>(importer.AssetPath.Replace(".motion3.json", ".fade.asset"));

            // Fade用モーションを作成
            CubismFadeMotionData fadeMotion;

            if (oldFadeMotion == null)
            {
                // Fade用モーションを作成
                fadeMotion = CubismFadeMotionData.CreateInstance(
                    importer.Motion3Json,
                    importer.AssetPath.Replace(directoryPath, ""),
                    animationClip.length,
                    CubismUnityEditorMenu.ShouldImportAsOriginalWorkflow,
                    CubismUnityEditorMenu.ShouldClearAnimationCurves);

                AssetDatabase.CreateAsset(
                    fadeMotion,
                    importer.AssetPath.Replace(".motion3.json", ".fade.asset"));
            }
            else
            {
                fadeMotion = CubismFadeMotionData.CreateInstance(
                    oldFadeMotion,
                    importer.Motion3Json,
                    importer.AssetPath.Replace(directoryPath, ""),
                    animationClip.length,
                    CubismUnityEditorMenu.ShouldImportAsOriginalWorkflow,
                    CubismUnityEditorMenu.ShouldClearAnimationCurves);

                EditorUtility.CopySerialized(fadeMotion, oldFadeMotion);
            }

            EditorUtility.SetDirty(fadeMotion);


            // Fade用モーションの参照をリストに追加
            var directoryName      = Path.GetDirectoryName(importer.AssetPath).ToString();
            var modelDir           = Path.GetDirectoryName(directoryName).ToString();
            var modelName          = Path.GetFileName(modelDir).ToString();
            var fadeMotionListPath = Path.GetDirectoryName(directoryName).ToString() + "/" + modelName + ".fadeMotionList.asset";
            var fadeMotions        = AssetDatabase.LoadAssetAtPath <CubismFadeMotionList>(fadeMotionListPath);

            // 参照リスト作成
            if (fadeMotions == null)
            {
                fadeMotions = ScriptableObject.CreateInstance <CubismFadeMotionList>();
                fadeMotions.MotionInstanceIds       = new int[0];
                fadeMotions.CubismFadeMotionObjects = new CubismFadeMotionData[0];
                AssetDatabase.CreateAsset(fadeMotions, fadeMotionListPath);
            }


            var instanceId  = AssetDatabase.LoadAssetAtPath <AnimationClip>(importer.AssetPath.Replace(".motion3.json", ".anim")).GetInstanceID();
            var motionIndex = Array.IndexOf(fadeMotions.MotionInstanceIds, instanceId);

            if (motionIndex != -1)
            {
                fadeMotions.CubismFadeMotionObjects[motionIndex] = fadeMotion;
            }
            else
            {
                motionIndex = fadeMotions.MotionInstanceIds.Length;

                Array.Resize(ref fadeMotions.MotionInstanceIds, motionIndex + 1);
                fadeMotions.MotionInstanceIds[motionIndex] = instanceId;

                Array.Resize(ref fadeMotions.CubismFadeMotionObjects, motionIndex + 1);
                fadeMotions.CubismFadeMotionObjects[motionIndex] = fadeMotion;
            }

            EditorUtility.SetDirty(fadeMotions);
        }