VertexAnimation/Runtime/Scripts/VA_AnimatorComponentAuthoring.cs
max ea1d2412b1 AnimationLibrary
AnimationLibraryBook editor setup.
AnimationLibrary AnimationData generation and material setup.
AnimationBook added support for non animation textures as well. This allows the user for example, to link Albedo maps with animations.
MaterialData is now in one component.
Note: Only 1/3th of the performance when having 4 swapping texture maps/arrays.
2020-12-14 20:27:44 +01:00

58 lines
1.6 KiB
C#

using Unity.Entities;
using Unity.Transforms;
using Unity.Collections;
using UnityEngine;
namespace TAO.VertexAnimation
{
[DisallowMultipleComponent]
public class VA_AnimatorComponentAuthoring : MonoBehaviour
{
}
//[GenerateAuthoringComponent]
public struct VA_AnimatorComponent : IComponentData
{
public int animationIndex;
// TODO: Animation blending.
//public int animationIndexSchedule;
public float animationTime;
public BlobAssetReference<VA_AnimationLibraryData> animationLibrary;
}
[UpdateAfter(typeof(VA_AnimationLibraryConversionSystem))]
public class VA_AnimatorConversionSystem : GameObjectConversionSystem
{
protected override void OnUpdate()
{
BlobAssetStore.TryGet(new Unity.Entities.Hash128("AnimationLib"), out BlobAssetReference<VA_AnimationLibraryData> animLib);
Entities.ForEach((VA_AnimatorComponentAuthoring animator) =>
{
Entity entity = GetPrimaryEntity(animator);
// Add animator to 'parent'.
VA_AnimatorComponent animatorComponent = new VA_AnimatorComponent
{
animationIndex = 0,
//animationIndexSchedule = -1,
animationTime = 0,
animationLibrary = animLib
};
DstEntityManager.AddComponentData(entity, animatorComponent);
// Add the Material data to the children.
var children = animator.GetComponentsInChildren<MeshRenderer>();
for (int i = 0; i < children.Length; i++)
{
Entity ent = GetPrimaryEntity(children[i]);
VA_AnimationDataComponent animationData = new VA_AnimationDataComponent();
DstEntityManager.AddComponentData(ent, animationData);
}
});
}
}
}