工作线程
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()方法,就可以在工作线程中处理耗时操作了,同步坐标等。


首页 我的博客
粤ICP备17103704号