fix: multiple animators support

This commit is contained in:
SergeyVolik 2022-02-19 17:21:57 +02:00
parent 4499f67f31
commit 7741a1ef77
4 changed files with 32 additions and 11 deletions

View File

@ -18,10 +18,18 @@ namespace TAO.VertexAnimation
private List<VA_Animation> loadedAnimationsPreview = null; private List<VA_Animation> loadedAnimationsPreview = null;
#endif #endif
public Unity.Entities.Hash128 key;
public string guid;
public void Init() public void Init()
{ {
// generate guid
guid = System.Guid.NewGuid().ToString("N");
key = new Unity.Entities.Hash128(guid);
animationData = new List<VA_AnimationData>(); animationData = new List<VA_AnimationData>();
foreach (VA_AnimationBook book in animationBooks) foreach (VA_AnimationBook book in animationBooks)
{ {
book.UpdateMaterials(); book.UpdateMaterials();

View File

@ -1,5 +1,7 @@
using Unity.Entities; using Unity.Entities;
using Unity.Collections; using Unity.Collections;
using Unity.Assertions;
using System;
namespace TAO.VertexAnimation namespace TAO.VertexAnimation
{ {
@ -14,7 +16,7 @@ namespace TAO.VertexAnimation
public class VA_AnimationLibraryConversionSystem : GameObjectConversionSystem public class VA_AnimationLibraryConversionSystem : GameObjectConversionSystem
{ {
// Static because of multi scene setup. // Static because of multi scene setup.
public static BlobAssetReference<VA_AnimationLibraryData> animLibAssetRef; //public static BlobAssetReference<VA_AnimationLibraryData> animLibAssetRef;
protected override void OnUpdate() protected override void OnUpdate()
{ {
@ -43,17 +45,23 @@ namespace TAO.VertexAnimation
} }
// Construct blob asset reference. // Construct blob asset reference.
//BlobAssetReference<VA_AnimationLibraryData> animLibAssetRef = blobBuilder.CreateBlobAssetReference<VA_AnimationLibraryData>(Allocator.Persistent); BlobAssetReference<VA_AnimationLibraryData> animLibAssetRef = blobBuilder.CreateBlobAssetReference<VA_AnimationLibraryData>(Allocator.Persistent);
// Static because of multi scene setup.
animLibAssetRef = blobBuilder.CreateBlobAssetReference<VA_AnimationLibraryData>(Allocator.Persistent);
// Add it to the asset store. // Add it to the asset store.
BlobAssetStore.TryAdd(new Hash128(VA_AnimationLibraryUtils.AnimationLibraryAssetStoreName), animLibAssetRef); var anumLibName = animationLib.animationLibrary.name;
var hash = animationLib.animationLibrary.key;
var result = BlobAssetStore.TryAdd(hash, animLibAssetRef);
if (animationLib.debugMode) if (animationLib.debugMode)
{ {
UnityEngine.Debug.Log("VA_AnimationLibrary has " + animLibAssetRef.Value.animations.Length.ToString() + " animations."); UnityEngine.Debug.Log($"blob asset {anumLibName} key: {hash.Value.x} {hash.Value.y} {hash.Value.z} {hash.Value.w} ");
UnityEngine.Debug.Log($"VA_AnimationLibrary {anumLibName} has {animLibAssetRef.Value.animations.Length.ToString()} animations.");
} }
Assert.IsTrue(result, $"{anumLibName} hasn't been added to the blob asset store");
} }
// Remove the entity since we don't need it anymore. // Remove the entity since we don't need it anymore.

View File

@ -1,5 +1,7 @@
using Unity.Entities; using Unity.Entities;
using Unity.Collections; using Unity.Collections;
using Unity.Assertions;
using UnityEngine;
namespace TAO.VertexAnimation namespace TAO.VertexAnimation
{ {
@ -40,7 +42,6 @@ namespace TAO.VertexAnimation
public static class VA_AnimationLibraryUtils public static class VA_AnimationLibraryUtils
{ {
public const string AnimationLibraryAssetStoreName = "VA_AnimationLibrary";
public static int GetAnimation(ref VA_AnimationLibraryData animationsRef, FixedString64 animationName) public static int GetAnimation(ref VA_AnimationLibraryData animationsRef, FixedString64 animationName)
{ {
@ -52,6 +53,8 @@ namespace TAO.VertexAnimation
} }
} }
Debug.LogError($"{animationName} animation not found!");
return -1; return -1;
} }

View File

@ -8,7 +8,7 @@ namespace TAO.VertexAnimation
[DisallowMultipleComponent] [DisallowMultipleComponent]
public class VA_AnimatorComponentAuthoring : MonoBehaviour public class VA_AnimatorComponentAuthoring : MonoBehaviour
{ {
public VA_AnimationLibrary lib;
} }
//[GenerateAuthoringComponent] //[GenerateAuthoringComponent]
@ -25,12 +25,14 @@ namespace TAO.VertexAnimation
{ {
protected override void OnUpdate() protected override void OnUpdate()
{ {
//BlobAssetStore.TryGet(new Unity.Entities.Hash128(VA_AnimationLibraryUtils.AnimationLibraryAssetStoreName), out BlobAssetReference<VA_AnimationLibraryData> animLib);
// Static because of multi scene setup. // Static because of multi scene setup.
BlobAssetReference<VA_AnimationLibraryData> animLib = VA_AnimationLibraryConversionSystem.animLibAssetRef; //BlobAssetReference<VA_AnimationLibraryData> animLib = VA_AnimationLibraryConversionSystem.animLibAssetRef;
Entities.ForEach((VA_AnimatorComponentAuthoring animator) => Entities.ForEach((VA_AnimatorComponentAuthoring animator) =>
{ {
BlobAssetStore.TryGet(animator.lib.key, out BlobAssetReference<VA_AnimationLibraryData> animLib);
Entity entity = GetPrimaryEntity(animator); Entity entity = GetPrimaryEntity(animator);
// Add animator to 'parent'. // Add animator to 'parent'.