public static WrapMode GetWrapMode(AnimationClip clip) { if (!clip.legacy) { var clipSettings = TinyAnimationConversionState.GetAnimationClipSettings(clip); return(clipSettings.loopTime ? WrapMode.Loop : WrapMode.ClampForever); } switch (clip.wrapMode) { case UnityEngine.WrapMode.Once: // Shares value with UnityEngine.WrapMode.Clamp { return(WrapMode.Once); } case UnityEngine.WrapMode.Loop: { return(WrapMode.Loop); } case UnityEngine.WrapMode.PingPong: { return(WrapMode.PingPong); } case UnityEngine.WrapMode.ClampForever: case UnityEngine.WrapMode.Default: default: { return(WrapMode.ClampForever); } } }
protected override void OnUpdate() { Entities.ForEach((UnityEngine.Animation animationComponent) => { if (!TinyAnimationConversionState.ValidateGameObjectAndWarn(animationComponent.gameObject)) { return; } var animationClips = TinyAnimationConversionState.GetAllAnimationClips(animationComponent); if (animationClips.Length == 0) { return; } ConversionUtils.WarnAboutUnsupportedFeatures(animationComponent); foreach (var clip in animationClips) { Convert(clip); } }); Entities.ForEach((TinyAnimationAuthoring animationComponent) => { if (!TinyAnimationConversionState.ValidateGameObjectAndWarn(animationComponent.gameObject)) { return; } var animationClips = TinyAnimationConversionState.GetAllAnimationClips(animationComponent); if (animationClips.Length == 0) { return; } ConversionUtils.WarnAboutUnsupportedFeatures(animationComponent.GetComponent <Animator>()); foreach (var clip in animationClips) { Convert(clip); } }); }
protected override void OnUpdate() { Entities.ForEach((UnityEngine.Animation animationComponent) => { if (!TinyAnimationConversionState.ValidateGameObjectAndWarn(animationComponent.gameObject)) { return; } var animationClips = TinyAnimationConversionState.GetAllAnimationClips(animationComponent); if (animationClips.Length == 0) { return; } foreach (var clip in animationClips) { DeclareAnimationClipReferencedAssets(clip); } }); Entities.ForEach((TinyAnimationAuthoring animationComponent) => { if (!TinyAnimationConversionState.ValidateGameObjectAndWarn(animationComponent.gameObject)) { return; } var animationClips = TinyAnimationConversionState.GetAllAnimationClips(animationComponent); if (animationClips.Length == 0) { return; } foreach (var clip in animationClips) { DeclareAnimationClipReferencedAssets(clip); } }); UserBindingsRemapper.FillMap(); }
protected override void OnUpdate() { Entities.ForEach((UnityEngine.Animation animationComponent) => { if (!TinyAnimationConversionState.ValidateGameObjectAndWarn(animationComponent.gameObject)) { return; } Convert(animationComponent); }); Entities.ForEach((TinyAnimationAuthoring animationComponent) => { if (!TinyAnimationConversionState.ValidateGameObjectAndWarn(animationComponent.gameObject)) { return; } Convert(animationComponent); }); }
void DeclareAnimationClipReferencedAssets(AnimationClip clip) { DeclareReferencedAsset(clip); // Animation clip may have references to other assets through pPtr curves (like Sprites, Materials, etc.) var bindings = AnimationUtility.GetObjectReferenceCurveBindings(clip); if (bindings.Length == 0) { return; } foreach (var binding in bindings) { var references = AnimationUtility.GetObjectReferenceCurve(clip, binding); foreach (var reference in references) { DeclareReferencedAsset(reference.value); TinyAnimationConversionState.RegisterDeclaredAsset(reference.value); } } }
public static void WarnAboutUnsupportedFeatures(AnimationClip clip) { if (clip.events.Length > 0) { Debug.LogWarning($"The animation clip {clip.name} contains some animation events, but they are not supported by TinyAnimation."); } if (clip.legacy) { return; } var clipSettings = TinyAnimationConversionState.GetAnimationClipSettings(clip); if (clipSettings.loopBlend) { Debug.LogWarning($"The animation clip {clip.name} has enabled Loop Pose, but it is not supported by TinyAnimation."); } if (clipSettings.hasAdditiveReferencePose) { Debug.LogWarning($"The animation clip {clip.name} has an additive reference pose, but it is not supported by TinyAnimation."); } if (TinyAnimationEngineBridge.HasRootMotion(clip)) { Debug.LogWarning($"The animation clip {clip.name} has root motion data, but it is not supported by TinyAnimation."); } if (clip.isHumanMotion) { Debug.LogWarning($"{clip.name} is a humanoid animation clip, but it is not supported by TinyAnimation."); } if (clip.hasMotionCurves) { Debug.LogWarning($"The animation clip {clip.name} has motion curves, but it is not supported by TinyAnimation."); } }
void Convert(Component animationComponent) { var animationClips = TinyAnimationConversionState.GetAllAnimationClips(animationComponent); if (animationClips.Length == 0) { return; } var rootGameObject = animationComponent.gameObject; var gameObjectEntity = TryGetPrimaryEntity(rootGameObject); if (gameObjectEntity == Entity.Null) { throw new Exception($"Could not get a conversion entity for {animationComponent.GetType().Name} on {rootGameObject}."); } DstEntityManager.AddBuffer <TinyAnimationClipRef>(gameObjectEntity); foreach (var clip in animationClips) { Convert(rootGameObject, clip, gameObjectEntity); } var clipReferences = DstEntityManager.GetBuffer <TinyAnimationClipRef>(gameObjectEntity); var currentClipEntity = clipReferences[0].Value; DstEntityManager.AddComponentData(gameObjectEntity, new TinyAnimationPlayer { CurrentClip = currentClipEntity, CurrentIndex = 0 }); if (PlaysAutomatically(animationComponent)) { DstEntityManager.AddComponent <UpdateAnimationTimeTag>(currentClipEntity); DstEntityManager.AddComponent <ApplyAnimationResultTag>(currentClipEntity); } }
protected override void OnUpdate() { var bakedAnimationsQuery = DstEntityManager.CreateEntityQuery(new EntityQueryDesc { All = new[] { ComponentType.ReadOnly <BakedAnimationClip>() }, Options = EntityQueryOptions.IncludeDisabled | EntityQueryOptions.IncludePrefab }); var commandBuffer = new EntityCommandBuffer(Allocator.TempJob); var bakedAnimationEntities = bakedAnimationsQuery.ToEntityArray(Allocator.TempJob); for (int entityIndex = 0; entityIndex < bakedAnimationEntities.Length; ++entityIndex) { commandBuffer.DestroyEntity(bakedAnimationEntities[entityIndex]); } var animationBindingNameQuery = DstEntityManager.CreateEntityQuery(new EntityQueryDesc { All = new[] { ComponentType.ReadOnly <AnimationBindingName>() }, Options = EntityQueryOptions.IncludeDisabled | EntityQueryOptions.IncludePrefab }); commandBuffer.RemoveComponent <AnimationBindingName>(animationBindingNameQuery); commandBuffer.Playback(DstEntityManager); commandBuffer.Dispose(); bakedAnimationEntities.Dispose(); TinyAnimationConversionState.Clear(); }
public static float GetCycleOffset(AnimationClip clip) { return(clip.legacy ? 0.0f : TinyAnimationConversionState.GetAnimationClipSettings(clip).cycleOffset); }