Instantly share code, notes, and snippets.

Embed
What would you like to do?
非同期でEntityの読込
using Unity.Entities;
using Unity.Entities.Serialization;
using UnityEngine;
using System.Threading.Tasks;
using UnityEngine.Profiling;
public class LoadWorldAsync : MonoBehaviour
{
[SerializeField] string fileName = "save.sav";
[SerializeField] GameObject sharedData = null;
private World localWorld;
private const string worldName = "local world";
private void OnEnable()
{
localWorld = new World(worldName);
localWorld.GetOrCreateManager<EntityManager>();
}
private void OnDisable()
{
if (localWorld.IsCreated)
localWorld.Dispose();
}
public async void Load()
{
var entityManager = localWorld.GetExistingManager<EntityManager>();
var num = SerializeUtilityHybrid.DeserializeSharedComponents(entityManager, sharedData, null);
var transaction = entityManager.BeginExclusiveEntityTransaction();
await Task.Run(() =>
{
using (var reader = new StreamBinaryReader(fileName))
{
SerializeUtility.DeserializeWorld(transaction, reader, num);
SerializeUtilityHybrid.ReleaseSharedComponents(transaction, num);
}
});
entityManager.EndExclusiveEntityTransaction();
World.Active.GetExistingManager<EntityManager>().MoveEntitiesFrom(entityManager);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment