using Unity.Collections; using UnityEngine; using UnityEngine.Jobs; public struct mJob : IJobParallelForTransform { [ReadOnly] public NativeArray<Vector3> position; public void Execute(int index, TransformAccess transform) { transform.position = position[index]; } } using UnityEngine; using Unity.Collections; using UnityEngine.Jobs; using Unity.Jobs; public class Script2 : MonoBehaviour { public Transform[] cubes; 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 * Random.Range(i, i + 10); } //设置Transform TransformAccessArray transformArray = new TransformAccessArray(cubes); mJob job = new mJob { position = position }; JobHandle jobHandle = job.Schedule(transformArray); jobHandle.Complete();//等待线程结束 Debug.LogError("结束同步"); transformArray.Dispose(); position.Dispose(); } } }
只要继承IJobParallelForTransform接口,并且实现Execute()方法,就可以在工作线程中处理耗时操作了,同步坐标等。