public override void OnEntityDestroy(Context f, Lockstep.UnsafeECS.Entity *entity) { if (_id2GameObject.TryGetValue(entity->LocalId, out var uEntity)) { _entityManager.DestroyEntity(uEntity); _id2GameObject.Remove(entity->LocalId); } }
public override void OnEntityCreated(Context f, Lockstep.UnsafeECS.Entity *pEntity) { if (pEntity == null) { int i = 0; Debug.LogError("OnEntityCreated null"); return; } if (pEntity->TypeId != EntityIds.Boid) { //Debug.LogError("OnEntityCreated not a Enemy" + pEntity->EnumType()); return; } var pBoid = (Boid *)pEntity; if (_entityPrefabs == null) { //TODO read config to setup Entity Prefabs var _spawners = GameObject.FindObjectsOfType <SSSamples.Boids.Authoring.SpawnRandomInSphere>(); _entityManager = Unity.Entities.World.Active.EntityManager; _entityPrefabs = new Unity.Entities.Entity[_spawners.Length]; for (int i = 0; i < _spawners.Length; i++) { _entityPrefabs[i] = _spawners[i].PrefabEntity; } } var uEntity = _entityManager.Instantiate(_entityPrefabs[pBoid->AssetData.AssetId]); _id2GameObject[pEntity->LocalId] = uEntity; _entityManager.SetComponentData(uEntity, new Unity.Transforms.LocalToWorld { Value = float4x4.TRS( pBoid->LocalToWorld.Position.ToVector3(), //quaternion.identity, quaternion.LookRotationSafe(pBoid->LocalToWorld.Forward.ToVector3(), Unity.Mathematics.math.up()), new float3(1.0f, 1.0f, 1.0f)) }); _entityManager.AddComponentData(uEntity, pEntity->_ref); }