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 Update() { float startTime = Time.realtimeSinceStartup; if (useJobs) { //Duplicate pieces of data. If we did this efficiently, only create these 1x. NativeArray <float> moveYarray = new NativeArray <float>(sunsList.Count, Allocator.TempJob); TransformAccessArray transformAccessArray = new TransformAccessArray(sunsList.Count); for (int i = 0; i < sunsList.Count; i++) { transformAccessArray.Add(sunsList[i].transform); moveYarray[i] = sunsList[i].moveY; } ReallyToughParallelJobTransforms reallyToughParallelJobTransforms = new ReallyToughParallelJobTransforms { deltaTime = Time.deltaTime, moveYarray = moveYarray, }; JobHandle jobHandle = reallyToughParallelJobTransforms.Schedule(transformAccessArray); jobHandle.Complete(); for (int i = 0; i < sunsList.Count; i++) { sunsList[i].moveY = moveYarray[i]; } transformAccessArray.Dispose(); moveYarray.Dispose(); } else { foreach (Sun sun in sunsList) { sun.transform.position += new Vector3(0, sun.moveY * Time.deltaTime); if (sun.transform.position.y > 5f) { sun.moveY = -math.abs(sun.moveY); } else if (sun.transform.position.y < -5f) { sun.moveY = math.abs(sun.moveY); } //Testing.ReallyToughTask(1000); } } //Debug.Log(((Time.realtimeSinceStartup - startTime) * 1000f) + "ms"); }
private void Update() { float startTime = Time.realtimeSinceStartup; if (useJobs) { //NativeArray<float3> positionArray = new NativeArray<float3>(zombieList.Count, Allocator.TempJob); NativeArray <float> moveYArray = new NativeArray <float>(zombieList.Count, Allocator.TempJob); TransformAccessArray transformAccessArray = new TransformAccessArray(zombieList.Count); for (int i = 0; i < zombieList.Count; i++) { //positionArray[i] = zombieList[i].transform.position; moveYArray[i] = zombieList[i].moveY; transformAccessArray.Add(zombieList[i].transform); } /* * ReallyToughParallelJob reallyToughParallelJob = new ReallyToughParallelJob { * deltaTime = Time.deltaTime, * positionArray = positionArray, * moveYArray = moveYArray, * }; * * JobHandle jobHandle = reallyToughParallelJob.Schedule(zombieList.Count, 100); * jobHandle.Complete(); */ ReallyToughParallelJobTransforms reallyToughParallelJobTransforms = new ReallyToughParallelJobTransforms { deltaTime = Time.deltaTime, moveYArray = moveYArray, }; JobHandle jobHandle = reallyToughParallelJobTransforms.Schedule(transformAccessArray); jobHandle.Complete(); for (int i = 0; i < zombieList.Count; i++) { //zombieList[i].transform.position = positionArray[i]; zombieList[i].moveY = moveYArray[i]; } //positionArray.Dispose(); moveYArray.Dispose(); transformAccessArray.Dispose(); } else { foreach (Zombie zombie in zombieList) { zombie.transform.position += new Vector3(0, zombie.moveY * Time.deltaTime); if (zombie.transform.position.y > 5f) { zombie.moveY = -math.abs(zombie.moveY); } if (zombie.transform.position.y < -5f) { zombie.moveY = +math.abs(zombie.moveY); } float value = 0f; for (int i = 0; i < 1000; i++) { value = math.exp10(math.sqrt(value)); } } } /* * if (useJobs) { * NativeList<JobHandle> jobHandleList = new NativeList<JobHandle>(Allocator.Temp); * for (int i = 0; i < 10; i++) { * JobHandle jobHandle = ReallyToughTaskJob(); * jobHandleList.Add(jobHandle); * } * JobHandle.CompleteAll(jobHandleList); * jobHandleList.Dispose(); * } else { * for (int i = 0; i < 10; i++) { * ReallyToughTask(); * } * } */ //Debug.Log(((Time.realtimeSinceStartup - startTime) * 1000f) + "ms"); }
private void Update() { float startTime = Time.realtimeSinceStartup; if (useJobs1) { NativeArray <float3> positionArray = new NativeArray <float3>(cubeList.Count, Allocator.TempJob); NativeArray <float> moveYArray = new NativeArray <float>(cubeList.Count, Allocator.TempJob); for (int i = 0; i < cubeList.Count; i++) { positionArray[i] = cubeList[i].transform.position; moveYArray[i] = cubeList[i].moveY; } ReallyToughParallelJob reallyToughParallelJob = new ReallyToughParallelJob { deltaTime = Time.deltaTime, positionArray = positionArray, moveYArray = moveYArray }; JobHandle jobHandle = reallyToughParallelJob.Schedule(cubeList.Count, 100); jobHandle.Complete(); for (int i = 0; i < cubeList.Count; i++) { cubeList[i].transform.position = positionArray[i]; cubeList[i].moveY = moveYArray[i]; } positionArray.Dispose(); moveYArray.Dispose(); } else if (useJobs2) { TransformAccessArray transformAccessArray = new TransformAccessArray(cubeList.Count); NativeArray <float> moveYArray = new NativeArray <float>(cubeList.Count, Allocator.TempJob); for (int i = 0; i < cubeList.Count; i++) { transformAccessArray.Add(cubeList[i].transform); moveYArray[i] = cubeList[i].moveY; } ReallyToughParallelJobTransforms reallyToughParallelJobTransforms = new ReallyToughParallelJobTransforms { deltaTime = Time.deltaTime, moveYArray = moveYArray }; JobHandle jobHandle = reallyToughParallelJobTransforms.Schedule(transformAccessArray); jobHandle.Complete(); for (int i = 0; i < cubeList.Count; i++) { cubeList[i].moveY = moveYArray[i]; } transformAccessArray.Dispose(); moveYArray.Dispose(); } else { foreach (Cube cube in cubeList) { cube.transform.position += new Vector3(0, cube.moveY * Time.deltaTime); if (cube.transform.position.y > 5f) { cube.moveY = -math.abs(cube.moveY); } if (cube.transform.position.y < -5f) { cube.moveY = +math.abs(cube.moveY); } float value = 0f; for (int i = 0; i < 1000; i++) { value = math.exp10(math.sqrt(value)); } } } Debug.Log(((Time.realtimeSinceStartup - startTime) * 1000f) + "ms"); }
private void Update() { float startTime = Time.realtimeSinceStartup; if (useJobs) { // 1. 根据需要 计算的属性 的总量生成一个 线程保护的数组, 把属性填充进去 //NativeArray<float3> positionArray = new NativeArray<float3>(zombieList.Count, Allocator.TempJob); NativeArray <float> moveYArray = new NativeArray <float>(zombieList.Count, Allocator.TempJob); TransformAccessArray transformAccessArray = new TransformAccessArray(zombieList.Count); for (int i = 0; i < zombieList.Count; i++) { //positionArray[i] = zombieList[i].transform.position; moveYArray[i] = zombieList[i].moveY; transformAccessArray.Add(zombieList[i].transform); } /* * ReallyToughParallelJob reallyToughParallelJob = new ReallyToughParallelJob { * deltaTime = Time.deltaTime, * positionArray = positionArray, * moveYArray = moveYArray, * }; * * JobHandle jobHandle = reallyToughParallelJob.Schedule(zombieList.Count, 100); * jobHandle.Complete(); */ // 2. job system 并行计算数据复制进去, ReallyToughParallelJobTransforms reallyToughParallelJobTransforms = new ReallyToughParallelJobTransforms { deltaTime = Time.deltaTime, moveYArray = moveYArray, }; // 3. job system 并行计算执行, 这个应该就是会执行到 IJobParallelForTransform 接口中的 Execute 方法 JobHandle jobHandle = reallyToughParallelJobTransforms.Schedule(transformAccessArray); // 传一个 transformAccess数组, 让并行计算的 job 中的 Execute 中可以访问但 transformAccess 属性 jobHandle.Complete(); // 4. 至此, 并行任务执行完 for (int i = 0; i < zombieList.Count; i++) { //zombieList[i].transform.position = positionArray[i]; zombieList[i].moveY = moveYArray[i]; } //positionArray.Dispose(); moveYArray.Dispose(); transformAccessArray.Dispose(); } else { foreach (Zombie zombie in zombieList) { zombie.transform.position += new Vector3(0, zombie.moveY * Time.deltaTime); if (zombie.transform.position.y > 5f) { zombie.moveY = -math.abs(zombie.moveY); } if (zombie.transform.position.y < -5f) { zombie.moveY = +math.abs(zombie.moveY); } float value = 0f; for (int i = 0; i < 1000; i++) { value = math.exp10(math.sqrt(value)); } } } /* * if (useJobs) { * NativeList<JobHandle> jobHandleList = new NativeList<JobHandle>(Allocator.Temp); * for (int i = 0; i < 10; i++) { * JobHandle jobHandle = ReallyToughTaskJob(); * jobHandleList.Add(jobHandle); * } * JobHandle.CompleteAll(jobHandleList); * jobHandleList.Dispose(); * } else { * for (int i = 0; i < 10; i++) { * ReallyToughTask(); * } * } */ //Debug.Log(((Time.realtimeSinceStartup - startTime) * 1000f) + "ms"); }
private void Update() { float startTime = Time.realtimeSinceStartup; if (useJobs) { //NativeArray<float3> positionArray = new NativeArray<float3>(soldierList.Count, Allocator.TempJob); NativeArray <float> moveYArray = new NativeArray <float>(soldierList.Count, Allocator.TempJob); TransformAccessArray transformAccessArray = new TransformAccessArray(soldierList.Count); for (int i = 0; i < soldierList.Count; i++) { //positionArray[i] = soldierList[i].transform.position; moveYArray[i] = soldierList[i].moveY; transformAccessArray.Add(soldierList[i].transform); } /* * ReallyToughParallelJob reallyToughParallelJob = new ReallyToughParallelJob { * deltaTime = Time.deltaTime, * positionArray = positionArray, * moveYArray = moveYArray * }; * * JobHandle jobHandle = reallyToughParallelJob.Schedule(soldierList.Count, soldierNumber / 10); * jobHandle.Complete(); */ ReallyToughParallelJobTransforms reallyToughParallelJobTransforms = new ReallyToughParallelJobTransforms { deltaTime = Time.deltaTime, //positionArray = positionArray, moveYArray = moveYArray }; JobHandle jobHandle = reallyToughParallelJobTransforms.Schedule(transformAccessArray); jobHandle.Complete(); for (int i = 0; i < soldierList.Count; i++) { //soldierList[i].transform.position = positionArray[i]; soldierList[i].moveY = moveYArray[i]; } //positionArray.Dispose(); moveYArray.Dispose(); transformAccessArray.Dispose(); } else { foreach (Soldier soldier in soldierList) { soldier.transform.position += new Vector3(0, soldier.moveY * Time.deltaTime); if (soldier.transform.position.y > 5.0f) { soldier.moveY = -math.abs(soldier.moveY); } if (soldier.transform.position.y < -5.0f) { soldier.moveY = +math.abs(soldier.moveY); } ReallyToughTask(); } } /* * if (useJobs) { * * NativeList<JobHandle> jobHandlesList = new NativeList<JobHandle>(Allocator.Temp); * // with Job * for (int i = 0; i < 10; i++) { * JobHandle jobHandle = ReallyToughTaskJob(); * jobHandlesList.Add(jobHandle); * } * JobHandle.CompleteAll(jobHandlesList); * jobHandlesList.Dispose(); // desaloue la NativeList * * } else { * // without Job * // Simulate 10 pathfinding * for (int i = 0; i < 10; i++) { * ReallyToughTask(); * } * } */ Debug.Log(((Time.realtimeSinceStartup - startTime) * 1000.0f) + "ms"); }
private void Update() { //float startTime = Time.realtimeSinceStartup; if (useJobs) { //var positionArray = new NativeArray<float3>(unitList.Count, Allocator.TempJob); var moveYArray = new NativeArray <float>(unitList.Count, Allocator.TempJob); var transformAccessArray = new TransformAccessArray(unitList.Count); for (int i = 0; i < unitList.Count; i++) { //positionArray[i] = unitList[i].transform.position; moveYArray[i] = unitList[i].moveY; transformAccessArray.Add(unitList[i].transform); } /* * ReallyToughParallelJob rtpj = new ReallyToughParallelJob() * { * deltaTime = Time.deltaTime, * positionArray = positionArray, * moveYArray = moveYArray * }; * * * var parallelJobHandle = rtpj.Schedule(unitList.Count, 100); * parallelJobHandle.Complete(); */ ReallyToughParallelJobTransforms reallyToughPJT = new ReallyToughParallelJobTransforms() { deltaTime = Time.deltaTime, moveYArray = moveYArray }; var transformParallelJobHandle = reallyToughPJT.Schedule(transformAccessArray); transformParallelJobHandle.Complete(); for (int i = 0; i < unitList.Count; i++) { //unitList[i].transform.position = positionArray[i]; unitList[i].moveY = moveYArray[i]; } //positionArray.Dispose(); moveYArray.Dispose(); transformAccessArray.Dispose(); Debug.Log(useJobs); } else { foreach (var unit in unitList) { unit.transform.position += new Vector3(0, unit.moveY * Time.smoothDeltaTime); if (unit.transform.position.y > 5f) { unit.moveY = -math.abs(unit.moveY); } if (this.unit.transform.position.y < -5f) { unit.moveY = +math.abs(unit.moveY); } } Debug.Log(useJobs); } /* * if (useJobs) * { * NativeList<JobHandle> jobHandleList = new NativeList<JobHandle>(Allocator.Temp); * for (int i = 0; i < 10; i++) * { * JobHandle reallyToughTaskJobHandle = ReallyToughTaskJob(); * jobHandleList.Add(reallyToughTaskJobHandle); * } * * JobHandle.CompleteAll(jobHandleList); //pauses the main thread unitl job has been completed * jobHandleList.Dispose(); * } * else * { * for (int i = 0; i < 10; i++) * { * ReallyToughTask(); * } * } */ //Debug.Log(((Time.realtimeSinceStartup - startTime) * 1000f) + "ms"); }