internal Snapshot ToSnapshot() { if (TransformCount > 0) { Unity.Collections.NativeArray <byte> blob = new Unity.Collections.NativeArray <byte>(TransformsBLOB, Unity.Collections.Allocator.Temp); // todo: use native array in snapshot Unity.Collections.NativeSlice <Snapshot.TransformInfo> transforms = new NativeSlice <byte>(blob).SliceConvert <Snapshot.TransformInfo>(); return(new Snapshot(Time, new List <Snapshot.TransformInfo>(transforms.ToArray()))); } return(new Snapshot(Time, new List <Snapshot.TransformInfo>())); }
protected override void OnUpdate() { Entities.ForEach((Entity e, SpawnRandomInSphere spawner, ref LocalToWorld localToWorld) => { int toSpawnCount = spawner.Count; // Using a .TempJob instead of a .Temp for `spawnPositions`, because the method // `RandomPointsInUnitSphere` passes this NativeArray into a Job var spawnPositions = new Unity.Collections.NativeArray <float3>(toSpawnCount, Allocator.TempJob); GeneratePoints.RandomPointsInUnitSphere(spawnPositions); // Calling Instantiate once per spawned Entity is rather slow, and not recommended // This code is placeholder until we add the ability to bulk-instantiate many entities from an ECB var entities = new Unity.Collections.NativeArray <Entity>(toSpawnCount, Allocator.Temp); for (int i = 0; i < toSpawnCount; ++i) { entities[i] = PostUpdateCommands.Instantiate(spawner.Prefab); } for (int i = 0; i < toSpawnCount; i++) { PostUpdateCommands.SetComponent(entities[i], new LocalToWorld { Value = float4x4.TRS( localToWorld.Position + (spawnPositions[i] * spawner.Radius), quaternion.LookRotationSafe(spawnPositions[i], math.up()), new float3(1.0f, 1.0f, 1.0f)) }); } // Using 'RemoveComponent' instead of 'DestroyEntity' as a safety. // Removing the SpawnRandomInSphere component is sufficient to prevent the spawner // from executing its spawn logic more than once. The spawner may have other components // that are relevant to ongoing processing; this system doesn't know about them & shouldn't // assume the entity is safe to delete. PostUpdateCommands.RemoveComponent <SpawnRandomInSphere>(e); spawnPositions.Dispose(); entities.Dispose(); }); }
private void Instance_OnSquadsToResumeChanged(Unity.Collections.NativeArray <int> sharedIndices) { if (buttonLaunch.Length == 0) { return; } var manager = World.Active.EntityManager; bool contains = false; for (int i = 0; i < sharedIndices.Length; i++) { var data = manager.GetSharedComponentData <SquadTagSharedComponentData>(sharedIndices[i]); if (data.id.value == spawner.SquadId) { contains = true; break; } } foreach (var item in buttonLaunch) { item.SetActive(contains); } }
public static unsafe void EmitSessionMetaData <T>(Guid id, int tag, Unity.Collections.NativeArray <T> data) where T : struct { Internal_EmitGlobalMetaData_Native(&id, 16, tag, (IntPtr)data.GetUnsafeReadOnlyPtr(), data.Length, UnsafeUtility.SizeOf <T>(), false); }
unsafe public static void EmitFrameMetaData <T>(Guid id, int tag, Unity.Collections.NativeArray <T> data) where T : struct { Internal_EmitFrameMetaData_Native(id.ToByteArray(), tag, (IntPtr)data.GetUnsafeReadOnlyPtr(), data.Length, UnsafeUtility.SizeOf <T>()); }