private void Start() { // Initialize velocities with a persistent allocator of size amountOfFish, which is a pre-declared variable. velocities = new NativeArray <Vector3>(amountOfFish, Allocator.Persistent); // Initialize transformAccessArray with size amountOfFish. transformAccessArray = new TransformAccessArray(amountOfFish); for (int i = 0; i < amountOfFish; i++) { float distanceX = Random.Range(-spawnBounds.x / 2, spawnBounds.x / 2); float distanceZ = Random.Range(-spawnBounds.z / 2, spawnBounds.z / 2); // Create a random spawn point within spawnBounds. Vector3 spawnPoint = (transform.position + Vector3.up * spawnHeight) + new Vector3(distanceX, 0, distanceZ); // Instantiate objectPrefab, which is a fish, at spawnPoint with no rotation. Transform t = (Transform)Instantiate(objectPrefab, spawnPoint, Quaternion.identity); // Add the instantiated transform to transformAccessArray. transformAccessArray.Add(t); } }
internal void AddMobsToSystem(int mobCnt) { movementJH.Complete(); if (!taa_mobs.isCreated) { taa_mobs = new TransformAccessArray(0); } if (na_mobStates == null || !na_mobStates.IsCreated) { na_mobStates = new NativeArray <MobState>(0, Allocator.Persistent); } if (!nl_startPos.IsCreated) { nl_startPos = new NativeList <Vector3>(Allocator.Persistent); } if (!nl_targetPos.IsCreated) { nl_targetPos = new NativeList <Vector3>(Allocator.Persistent); } int oldMobCnt = PoolManager.instance.MobPool.m_cnt - mobCnt; for (int i = 0; i < mobCnt; ++i) { var startPos = GameManager.instance.GetSpawnPosFromStart(GameManager.instance.m_defaultSpawnPos, oldMobCnt + i, 2.0f); var SpawnedMob = PoolManager.instance.MobPool.SpawnObject(startPos, Quaternion.identity) as MobFightComponent; taa_mobs.Add(SpawnedMob.transform); nl_startPos.Add(startPos); nl_targetPos.Add(new Vector3(startPos.x, startPos.y, GameManager.instance.Target.transform.position.z)); } if (na_mobStates.Length > 0) { var tempMobState = new NativeArray <MobState>(na_mobStates, Allocator.Temp); na_mobStates.Dispose(); na_mobStates = new NativeArray <MobState>(tempMobState.Length + mobCnt, Allocator.Persistent); NativeArray <MobState> .Copy(tempMobState, 0, na_mobStates, 0, tempMobState.Length); } else { na_mobStates.Dispose(); na_mobStates = new NativeArray <MobState>(mobCnt, Allocator.Persistent); } for (int i = oldMobCnt; i < na_mobStates.Length; ++i) { na_mobStates[i] = MobState.ToTarget; } if (PoolManager.instance.SpearPool.m_cnt < PoolManager.instance.MobPool.m_cnt) { int diff = PoolManager.instance.MobPool.m_cnt - PoolManager.instance.SpearPool.m_cnt; AddSpearsToSystem(diff); } }
private void Spawn() { agentsTransforms = new Transform[quantity]; for (int i = 0; i < quantity; i++) { // having no parent is actually very important. Sharing the parent will prevent the job // system to split calculations across threads agentsTransforms[i] = Instantiate(agentPrefab, null).transform; float t = (float)i / (float)quantity; float x = t * 90.0f; x -= 45.0f; float z = UnityEngine.Random.Range(-4.0f, 4.0f); // scatter the spawn along the x/z axis to avoid excessive overlapping agentsTransforms[i].position = transform.position + new Vector3(x, 0.0f, z); // uncomment for color variation but sacrify instancing //agentsTransforms[i].GetComponentInChildren<MeshRenderer>().material.color = new Color(t, t * (z * 0.25f), z * 0.25f, 1.0f); float sy = UnityEngine.Random.Range(0.4f, 1.0f); float sxz = UnityEngine.Random.Range(0.4f, 0.8f); agentsTransforms[i].localScale = new Vector3(sxz, sy, sxz); } agentsTransAcc = new TransformAccessArray(agentsTransforms); }
public ColliderGroupJobData(IReadOnlyList <VRMSpringBoneColliderGroup> groups) { var length = groups.Count; this.TransformAccessArray = new TransformAccessArray(length); foreach (var group in groups) { this.TransformAccessArray.Add(group.transform); } this.GroupParams = new NativeArray <GroupParam>(length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); for (var i = 0; i < length; i++) { var group = groups[i]; Assert.IsTrue(group.BlittableFieldsArray.IsCreated); this.GroupParams[i] = new GroupParam { InstanceID = group.GetInstanceID(), BlittableFieldsPtr = (VRMSpringBoneColliderGroup.BlittableFields *)@group.BlittableFieldsArray.GetUnsafePtr(), SphereCollidersLength = group.BlittableFieldsArray.Length, }; } }
/// <summary> /// 释放,如果为true,则重新加载数据 /// 注意,该操作会释放大量GC /// </summary> /// <param name="isReset"></param> public void Dispose(bool isReset) { Hjob.Complete(); pointReadList.Dispose(); pointReadWriteList.Dispose(); pointTransformsList.Dispose(); constraintReadList1.Dispose(); for (int i = 0; i < constraintReadList.Length; i++) { constraintReadList[i].Dispose(); } if (isReset) { pointTransformsList = new TransformAccessArray(0); m_constraintList = new List <ConstraintRead[]>(); m_pointReadList = new List <PointRead>(); m_pointReadWriteList = new List <PointReadWrite>(); } else { collidersReadList.Dispose(); collidersReadWriteList.Dispose(); colliderTransformsList.Dispose(); } }
// Update is called once per frame void Update() { Transform[] transforms = new Transform[people.Count]; float[] influence = new float[people.Count]; for (int i = 0; i < people.Count; i++) { transforms[i] = people[i].transform; influence[i] = people[i].influenceLevel; } TransformAccessArray transformAccessArray = new TransformAccessArray(transforms, 100); NativeArray <float> influenceNA = new NativeArray <float>(influence, Allocator.TempJob); ApplyInfluenceJob applyInfluenceJob = new ApplyInfluenceJob { baseMovement = 1, deltaTime = Time.deltaTime, sin = math.sin(Time.time), Influence = influenceNA, random = new Unity.Mathematics.Random((uint)UnityEngine.Random.Range(1, 100000)) }; JobHandle handle = applyInfluenceJob.Schedule(transformAccessArray); handle.Complete(); transformAccessArray.Dispose(); influenceNA.Dispose(); }
private void Update() { float startTime = Time.realtimeSinceStartup; //Objenin sürekli hareket halinde olmasını sağlamak için gerekli tanımları yaptık NativeArray <float> moveYArray = new NativeArray <float> (BodyList.Count, Allocator.TempJob); TransformAccessArray transformAccessArray = new TransformAccessArray(BodyList.Count); for (int i = 0; i < BodyList.Count; i++) { moveYArray[i] = BodyList[i].moveY; transformAccessArray.Add(BodyList[i].transform); } ReallyToughParallelJobTransforms reallyToughParallelJobTransforms = new ReallyToughParallelJobTransforms { deltaTime = Time.deltaTime, moveYArray = moveYArray, }; JobHandle jobHandle = reallyToughParallelJobTransforms.Schedule(transformAccessArray); jobHandle.Complete(); for (int i = 0; i < BodyList.Count; i++) { BodyList[i].moveY = moveYArray[i]; } moveYArray.Dispose(); transformAccessArray.Dispose(); txtTotal.text = "TOTAL\n" + GameObject.FindGameObjectWithTag("bodies").transform.childCount.ToString(); //Obje sayısını güncel tuttuk }
private void OnEnable() { _startPos = curveStart is null ? Vector3.zero : curveStart.transform.position; _endPos = curveEnd is null ? Vector3.zero : curveEnd.transform.position; _midPos = curveMiddle is null ? Vector3.zero : curveMiddle.transform.position; _firstDistance = Vector3.Distance(_startPos, _midPos) + Vector3.Distance(_midPos, _endPos); var chainTransforms = dickChains.Select(o => o.transform).ToArray(); _transformAccessArray = new TransformAccessArray(chainTransforms, chainTransforms.Length); _dickTransformTargetNative = new NativeArray <ApproachTarget>(dickChains.Length, Allocator.Persistent); _factor = new NativeArray <float>(1, Allocator.Persistent) { [0] = 0f }; Observable.IntervalFrame(10) .TakeUntilDisable(this) .Subscribe(_ => { AssignNearestDickNavigator(); AssignNearestPullProxy(); }); _disposed = false; }
private void Start() { for (int i = 0; i < _numberOfOrbits; i++) { for (int j = 0; j < _numberOfStars / _numberOfOrbits; j++) { var newStar = Instantiate(_starPrefab); newStar.GetComponent <MeshRenderer>().material = _materials[UnityEngine.Random.Range(0, _materials.Count)]; var randomX = Mathf.Cos(UnityEngine.Random.Range(0f, 360f)); var randomY = Mathf.Sin(UnityEngine.Random.Range(0f, 360f)); // TODO: Might want to make use of the axis here somehow var offsetDirection = new Vector3(randomX, 0, randomY); newStar.transform.position = transform.position + (offsetDirection.normalized * (i + 1) * _orbitOffset) * (_noiseOffset ? UnityEngine.Random.Range(0f, _noiseOffsetAmount) : 1); _starSpeeds.Add(_scaleRotationToDistance ? (_speed / (newStar.transform.position - transform.position).magnitude) : _speed); _stars.Add(newStar.transform); _distancesFromCenter.Add(math.sqrt(math.pow(newStar.transform.position.x - transform.position.x, 2) + math.pow(newStar.transform.position.z - transform.position.z, 2))); } } _nativeStarSpeeds = new NativeArray <float>(_starSpeeds.ToArray(), Allocator.Persistent); _transformAccessArray = new TransformAccessArray(_stars.ToArray()); _nativeDistancesFromCenter = new NativeArray <float>(_distancesFromCenter.ToArray(), Allocator.Persistent); }
void Start() { _ui = GetComponent <UI>(); _transforms = new TransformAccessArray(0, -1); AddShips(enemyShipCount); }
void Prepare() { if (_taa.isCreated) { return; } var xforms = new Transform[_instanceCount]; for (var i = 0u; i < _instanceCount; i++) { // We have to insert an empty game object to avoid an issue where // prevents game objects with HideFlags from getting ray-traced. var go1 = new GameObject("LightBar"); var go2 = new GameObject("Renderer", typeof(MeshFilter), typeof(MeshRenderer)); go1.hideFlags = HideFlags.HideAndDontSave; go1.transform.parent = transform; go2.transform.parent = go1.transform; go2.GetComponent <MeshFilter>().sharedMesh = _mesh; go2.GetComponent <MeshRenderer>().sharedMaterial = _material; xforms[i] = go1.transform; } _taa = new TransformAccessArray(xforms); }
void Start() { cubes = GetComponent <GridGenerator> ().GetTransforms(); transformsAccess = new TransformAccessArray(cubes); velocity = new NativeArray <float3> (cubes.Length, Allocator.Persistent); }
void Start() { // 修改为符合Jobs要求的数据结构 m_FishVels = new NativeArray <Vector3>(amountOfFish, Allocator.Persistent); m_TrsAccessArray = new TransformAccessArray(amountOfFish); m_FishRotTimes = new NativeArray <float>(amountOfFish, Allocator.Persistent); for (int i = 0; i < amountOfFish; i++) { // 在规定边界范围内随机生成鱼 var trsFish = (Transform)Instantiate(objectPrefab, transform.position + new Vector3( UnityEngine.Random.Range(-spawnBounds.x / 2, spawnBounds.x / 2), 0, UnityEngine.Random.Range(-spawnBounds.z / 2, spawnBounds.z / 2)), Quaternion.identity); // 在用JobsParallelForTransform的情况下,transform不能有parent,否则都会被视为一个transform来处理,无法分别运行在多个核上 // 详情见:https://forum.unity.com/threads/jobs-performance-questions.520406/ //trsFish.parent = this.transform; m_TrsAccessArray.Add(trsFish); m_FishRotTimes[i] = Random.Range(1f, 5f); m_FishVels[i] = new Vector3(Random.Range(-1f, 1f), 0, Random.Range(-1f, 1f)); } }
/// <summary> /// Start関数 /// </summary> void Start() { // Debugger登録 DebugUI.SetCounter(animationInfo, characterNum); // animation の情報初期化 animationInfo.Initialize(); // それぞれのバッファーを初期化/作成 boardRenderers = new BoardRenderer[characterNum]; characterTransforms = new Transform[characterNum]; var material = new Material(drawMaterial); material.mainTexture = animationInfo.texture; for (int i = 0; i < characterNum; ++i) { var gmo = GameObject.Instantiate(prefab, new Vector3(Random.RandomRange(-InitPosXParam, InitPosXParam), 0.5f, Random.RandomRange(-InitPosZParam, InitPosZParam)), Quaternion.identity); // 今回のサンプルではColliderは不要なので削除 GameObject.Destroy(gmo.GetComponent <Collider>()); characterTransforms[i] = gmo.transform; boardRenderers[i] = gmo.GetComponent <BoardRenderer>(); boardRenderers[i].SetMaterial(material); int idx = i % animationInfo.sprites.Length; boardRenderers[i].SetRect(animationInfo.GetUvRect(0)); } // transformAccessArray = new TransformAccessArray(characterTransforms); }
protected override void OnCreate() { m_TransformAccessArray = new TransformAccessArray(0); m_NewQuery = GetEntityQuery( new EntityQueryDesc { All = new[] { ComponentType.ReadOnly <CompanionLink>() }, None = new[] { ComponentType.ReadOnly <CompanionGameObjectUpdateTransformSystemState>() } } ); m_ExistingQuery = GetEntityQuery( new EntityQueryDesc { All = new[] { ComponentType.ReadOnly <CompanionLink>(), ComponentType.ReadOnly <CompanionGameObjectUpdateTransformSystemState>(), ComponentType.ReadOnly <LocalToWorld>(), } } ); m_DestroyedQuery = GetEntityQuery( new EntityQueryDesc { All = new[] { ComponentType.ReadOnly <CompanionGameObjectUpdateTransformSystemState>() }, None = new[] { ComponentType.ReadOnly <CompanionLink>() } } ); }
protected override void OnStartRunning() { var comps = GetEntities <Components>(); if (comps.Length == 0) { return; } var speeds = new float[comps.Length]; var trs = new Transform[comps.Length]; for (int i = 0; i < trs.Length; i++) { speeds[i] = comps[i].mover.speed; trs[i] = comps[i].tr; } transAccessArray = new TransformAccessArray(trs); nativeSpeeds = new NativeArray <float>(speeds, Allocator.TempJob); job = new MyJob { speeds = nativeSpeeds }; }
void Start() { rotationAxis = new NativeArray <Vector3>(1, Allocator.Persistent); this.rotationAxis[0] = Vector3.up; Transform[] transforms = { transform }; transformArray = new TransformAccessArray(transforms); }
void Update() { //按下鼠标左键后 if (Input.GetMouseButtonDown(0)) { //随机设置坐标 NativeArray <Vector3> position = new NativeArray <Vector3>(cubes.Length, Allocator.Persistent); for (int i = 0; i < position.Length; i++) { position[i] = Vector3.one * i; } //设置Transform TransformAccessArray transformArray = new TransformAccessArray(cubes); //启动工作线程 MyJob job = new MyJob() { position = position }; JobHandle jobHandle = job.Schedule(transformArray); //等待工作线程结束 jobHandle.Complete(); Debug.Log("工作线程结束"); //结束 transformArray.Dispose(); position.Dispose(); } }
protected override void OnUpdate() { int queryLength = m_query.CalculateEntityCount(); if (queryLength > m_transforms.capacity) { m_transforms.Dispose(); m_transforms = new TransformAccessArray(queryLength); } int transformsLength = m_transforms.length; for (int i = 0; i < transformsLength; i++) { m_transforms.RemoveAtSwapBack(i); } var jh = Dependency; Dependency = default; Entities.ForEach((CameraManager manager) => { m_transforms.Add(manager.camera.transform); }).WithoutBurst().Run(); var ltws = m_query.ToComponentDataArrayAsync <LocalToWorld>(Allocator.TempJob, out var jh2); Dependency = new CopyTransformsJob { ltws = ltws }.Schedule(m_transforms, JobHandle.CombineDependencies(jh, jh2)); Dependency = ltws.Dispose(Dependency); }
public void AddNewColumn(OreColumn oreColumn) { audioSourceEffects.PlayOneShot(addColumnSound); var columnHolder = InstantiateColumn(oreColumn); columnHolder.transform.SetAsFirstSibling(); columnHolder.transform.localPosition = new Vector3(-1 * _prefabSize.x, 0, 0); var transformAccessArray = new TransformAccessArray(_game.GetOreColumns().Count); for (int i = 0; i < spawnPoint.transform.childCount; i++) { transformAccessArray.Add(spawnPoint.transform.GetChild(i)); } new MoveColumnsLeftJob { PrefabWidth = _prefabSize.x } .Schedule(transformAccessArray) .Complete(); transformAccessArray.Dispose(); }
public SpringBoneJobData(IReadOnlyList <VRMSpringBone.Node> nodes) { var length = nodes.Count; this.Length = length; this.TransformAccessArray = new TransformAccessArray(length); this.ParentTransformAccessArray = new TransformAccessArray(length); foreach (var node in nodes) { this.TransformAccessArray.Add(node.Transform); this.ParentTransformAccessArray.Add(node.Transform.parent); } this.ImmutableNodeParams = new NativeArray <ImmutableNodeParam>(length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); this.VariableNodeParams = new NativeArray <VariableNodeParam>(length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); for (var i = 0; i < length; i++) { var node = nodes[i]; this.ImmutableNodeParams[i] = new ImmutableNodeParam { Length = node.Length, LocalRotation = node.LocalRotation, BoneAxis = node.BoneAxis, BlittableFieldsPtr = node.BlittableFieldsPtr, CenterMatrixPtr = node.CenterMatrixPtr, }; this.VariableNodeParams[i] = new VariableNodeParam { CurrentTail = node.InitTail, PrevTail = node.InitTail, }; } }
private void Spawn() { if (prefab == null || spawnArea == null || spawnObjects.Count > 0) { return; } Vector3 area = spawnArea.transform.position; Vector3 scale = spawnArea.transform.localScale; float radius = Mathf.Max(scale.x, scale.y, scale.z); transformAccessArray = new TransformAccessArray(spawnNum); moveDirections = new NativeArray <Vector3>(spawnNum, Allocator.Persistent); rotateAngles = new NativeArray <Vector3>(spawnNum, Allocator.Persistent); spawnObjects.Clear(); for (int i = 0; i < spawnNum; i++) { Vector3 pos = Random.insideUnitSphere * radius + area; GameObject go = Instantiate(prefab, pos, prefab.transform.rotation); spawnObjects.Add(go); transformAccessArray.Add(go.transform); moveDirections[i] = moveDirection * Random.Range(minMoveSpeed, maxMoveSpeed); rotateAngles[i] = rotateAngle * Random.Range(minRotateSpeed, maxRotateSpeed); } DisplayCount(); }
protected override void OnCreate() { m_Entities = new NativeArray <Entity>(0, Allocator.Persistent); m_TransformAccessArray = new TransformAccessArray(0); m_NewQuery = GetEntityQuery( new EntityQueryDesc { All = new[] { ComponentType.ReadOnly <CompanionLink>() }, None = new[] { ComponentType.ReadOnly <CompanionGameObjectUpdateTransformSystemState>() } } ); m_ExistingQuery = GetEntityQuery( new EntityQueryDesc { All = new[] { ComponentType.ReadOnly <CompanionLink>(), ComponentType.ReadOnly <CompanionGameObjectUpdateTransformSystemState>() } } ); m_DestroyedQuery = GetEntityQuery( new EntityQueryDesc { All = new[] { ComponentType.ReadOnly <CompanionGameObjectUpdateTransformSystemState>() }, None = new[] { ComponentType.ReadOnly <CompanionLink>() } } ); }
void Start() { objs = new Transform[num]; for (int i = 0; i < num; i++) { var obj = Instantiate(prefab).transform; obj.position = Vector3.zero; objs[i] = obj; } pos = new NativeArray <Vector3>(num, Allocator.Persistent); vel = new NativeArray <Vector3>(num, Allocator.Persistent); acc = new NativeArray <Vector3>(num, Allocator.Persistent); trs = new TransformAccessArray(objs); rst = new NativeArray <int>(8, Allocator.Persistent); rnd = new NativeArray <Random>(num, Allocator.Persistent); for (int i = 0; i < num; i++) { pos[i] = Vector3.zero; vel[i] = UnityEngine.Random.insideUnitSphere; acc[i] = Vector3.zero; } seed = new Random(1); }
/// <summary> /// create a job for transform position all enimies with speed /// </summary> private void JobWorkToTransform() { NativeArray <float> speedArr = new NativeArray <float>(enemies.Count, Allocator.TempJob); TransformAccessArray transformAccessArray = new TransformAccessArray(enemies.Count); for (int i = 0; i < enemies.Count; i++) { speedArr[i] = enemies[i].speed; transformAccessArray.Add(enemies[i].transform); } UpdateTransform job = new UpdateTransform { deltaTime = Time.deltaTime, speedArray = speedArr, targetX = _targetX, }; JobHandle jobHandle = job.Schedule(transformAccessArray); jobHandle.Complete(); speedArr.Dispose(); transformAccessArray.Dispose(); }
/// <summary> /// 释放,如果为true,则重新加载数据 /// 注意,该操作会释放大量GC /// </summary> /// <param name="isReset"></param> public void Dispose(bool isReset) { JobHandle.CompleteAll(handleList.AsArray()); pointReadList.Dispose(); pointReadWriteList.Dispose(); pointTransformsList.Dispose(); constraintReadList1.Dispose(); ConstraintReadByPointIndex.Dispose(); for (int i = 0; i < constraintReadList.Length; i++) { constraintReadList[i].Dispose(); } if (isReset) { pointTransformsList = new TransformAccessArray(0); m_constraintList = new List <ConstraintRead[]>(); m_pointReadList = new List <PointRead>(); m_pointReadWriteList = new List <PointReadWrite>(); } else { handleList.Dispose(); collidersReadList.Dispose(); collidersReadWriteList.Dispose(); colliderTransformsList.Dispose(); } }
void Start() { fps = GetComponent <FPS>(); transforms = new TransformAccessArray(0, -1); AddShips(enemyShipCount); }
void RemoveShipsFromList() { foreach (Boid ship in shipsToDestroy) { // Get ship no int shipNo = ships.IndexOf(ship); // Remove ship from list ships.RemoveAt(shipNo); shipComp.RemoveAt(shipNo); // Recreate the velocities array List <Vector3> tempVelocities = new List <Vector3>(velocities.ToArray()); tempVelocities.RemoveAt(shipNo); velocities.Dispose(); velocities = new NativeArray <Vector3>(ships.Count, Allocator.Persistent); velocities.CopyFrom(tempVelocities.ToArray()); // Remove from transfrom access array transformAccessArray.Dispose(); Transform[] tempTransforms = new Transform[ships.Count]; for (int i = 0; i < ships.Count; i++) { tempTransforms[i] = ships[i].transform; } transformAccessArray = new TransformAccessArray(tempTransforms); } shipsToDestroy.Clear(); }
void UpdateTransformIndex() { if (!m_Dirty) { return; } m_Dirty = false; Profiler.BeginSample("UpdateTransformIndex"); NativeArrayHelpers.ResizeIfNeeded(ref m_TransformMatrix, m_Transform.Length); if (!m_TransformAccessArray.isCreated) { TransformAccessArray.Allocate(m_Transform.Length, -1, out m_TransformAccessArray); } else if (m_TransformAccessArray.capacity != m_Transform.Length) { m_TransformAccessArray.capacity = m_Transform.Length; } m_TransformAccessArray.SetTransforms(m_Transform); for (int i = 0; i < m_Transform.Length; ++i) { if (m_Transform[i] != null) { var instanceId = m_Transform[i].GetInstanceID(); var transformData = m_TransformData[instanceId]; transformData.transformIndex = i; m_TransformData[instanceId] = transformData; } } Profiler.EndSample(); }
public static void OnDroneCountChange() { movementJobHandle.Complete(); energyJobHandle.Complete(); _Transforms.Dispose(); _Transforms = new TransformAccessArray(0); foreach (Drone drone in Drones.Values) { _Transforms.Add(drone.transform); } _JobInfoArray.Dispose(); _JobInfoArray = new NativeArray <MovementInfo>(_Transforms.length, Allocator.Persistent); _EnergyInfoArray.Dispose(); _EnergyInfoArray = new NativeArray <EnergyInfo>(_Transforms.length, Allocator.Persistent); _PreviousPositions.Dispose(); _PreviousPositions = new NativeArray <Vector3>(_Transforms.length, Allocator.Persistent); int j = 0; foreach (Drone drone in Drones.Values) { _PreviousPositions[j] = drone.PreviousPosition; _JobInfoArray[j] = new MovementInfo(); _JobInfoArray[j] = drone.GetMovementInfo(_JobInfoArray[j]); _EnergyInfoArray[j] = new EnergyInfo(); _EnergyInfoArray[j] = drone.GetEnergyInfo(_EnergyInfoArray[j]); j++; } }