コード例 #1
0
        public GameObject GenerateUnityObject(TimeLineData playable, Context ctx)
        {
            int startFrame = playable.AbsoluteTimeOffset - playable.TrimIn;
            int frameCount = playable.GetFrameCount(stage.fps) + playable.TrimIn + playable.TrimOut;

            var playableObj = MakePlayableBaseObject(playable, ref ctx, startFrame / ctx.fps, frameCount / ctx.fps);
            var pathForName = AnimationUtility.CalculateTransformPath(playableObj.transform, ctx.rootTransform);

            // GROUP
            var groupTrack = ctx.parentTimeline.CreateTrack <GroupTrack>(null, playable.displayName);

            ctx.ctx.AddObjectToAsset(pathForName + "_GroupTrack", groupTrack);

            // ANIMATION
            var animationTrack = ctx.parentTimeline.CreateTrack <AnimVRTrack>(groupTrack, pathForName + "_animation");

            ctx.ctx.AddObjectToAsset(pathForName + "_animation", animationTrack);

            var animationClip = animationTrack.CreateDefaultClip();

            animationClip.duration = playable.GetFrameCount(stage.fps) / stage.fps;
            animationClip.start    = playable.TrimIn / stage.fps;

            typeof(TimelineClip).GetProperty("preExtrapolationMode").SetValue(animationClip, LOOP_MAPPING[playable.LoopIn], null);
            typeof(TimelineClip).GetProperty("postExtrapolationMode").SetValue(animationClip, LOOP_MAPPING[playable.LoopOut], null);

            var animAsset = animationClip.asset as AnimVRFramesAsset;

            animAsset.FPS = stage.fps;

            if (playable.Frames.Count > 0)
            {
                animAsset.FadeIn  = playable.Frames[0].FadeModeIn;
                animAsset.FadeOut = playable.Frames[0].FadeModeOut;
            }

            ctx.director.SetGenericBinding(animAsset, playableObj);
            ctx.ctx.AddObjectToAsset(pathForName + "_animAsset", animAsset);

            int frameIndex = -1;

            foreach (var frame in playable.Frames)
            {
                if (!frame.isInstance)
                {
                    var frameObj = GenerateUnityObject(frame, ctx, ++frameIndex);
                    if (frameIndex != 0)
                    {
                        frameObj.SetActive(false);
                    }
                    frameObj.transform.SetAsLastSibling();
                }
                animAsset.FrameIndices.Add(frameIndex);
            }

            return(playableObj);
        }
コード例 #2
0
        public GameObject GenerateUnityObject(TimeLineData playable, int frameOffset, AssetImportContext ctx, TimelineAsset parentTimeline, TrackAsset parentTrack, Transform parent)
        {
            var playableObj = MakePlayableBaseObject(playable, parent);
            var pathForName = AnimationUtility.CalculateTransformPath(playableObj.transform, stageTransform);

            // GROUP
            var groupTrack = parentTimeline.CreateTrack <GroupTrack>(parentTrack, playable.displayName);

            ctx.AddSubAsset(pathForName + "_GroupTrack", groupTrack);

            // ANIMATION
            var animationTrack = parentTimeline.CreateTrack <AnimVRTrack>(groupTrack, pathForName + "_animation");

            ctx.AddSubAsset(pathForName + "_animation", animationTrack);

            var animationClip = animationTrack.CreateDefaultClip();

            animationClip.duration = playable.GetFrameCount(stage.fps) / stage.fps;
            animationClip.start    = (playable.AbsoluteTimeOffset + frameOffset) / stage.fps;

            typeof(TimelineClip).GetProperty("preExtrapolationMode").SetValue(animationClip, LOOP_MAPPING[playable.LoopIn], null);
            typeof(TimelineClip).GetProperty("postExtrapolationMode").SetValue(animationClip, LOOP_MAPPING[playable.LoopOut], null);

            var animAsset = animationClip.asset as AnimVRFramesAsset;

            animAsset.FPS = stage.fps;

            director.SetGenericBinding(animAsset, playableObj);
            ctx.AddSubAsset(pathForName + "_activeAsset", animAsset);

            // ACTIVATION
            var frameTrack = parentTimeline.CreateTrack <ActivationTrack>(groupTrack, pathForName + "_track");

            ctx.AddSubAsset(pathForName + "_track", frameTrack);
            director.SetGenericBinding(frameTrack, playableObj);

            var frameClip = frameTrack.CreateDefaultClip();

            frameClip.start    = playable.LoopIn != AnimVR.LoopType.OneShot ? 0 : animationClip.start;
            frameClip.duration = playable.LoopOut != AnimVR.LoopType.OneShot ?
                                 parentTimeline.fixedDuration - frameClip.start :
                                 (animationClip.start - frameClip.start) + animationClip.duration;

            ctx.AddSubAsset(pathForName + "_activeAsset", frameClip.asset);

            int frameIndex = -1;

            foreach (var frame in playable.Frames)
            {
                if (!frame.isInstance)
                {
                    var frameObj = GenerateUnityObject(frame, ctx, parentTimeline, playableObj.transform, ++frameIndex);
                    if (frameIndex != 0)
                    {
                        frameObj.SetActive(false);
                    }
                    frameObj.transform.SetAsLastSibling();
                }
                animAsset.FrameIndices.Add(frameIndex);
            }

            return(playableObj);
        }