对于处理Transform的Job,要继承IJobParallelForTransform:
using Unity.Collections;
using Unity.Entities;
using Unity.Jobs;
using UnityEngine;
using UnityEngine.Jobs;
// 继承IJobParallelForTransform
struct TransformJob : IJobParallelForTransform
{
public NativeArray<Vector3> Velocity;
public void Execute(int index, TransformAccess transform)
{
transform.position += Velocity[index];
}
}
public class JobParallelForTransformTest : MonoBehaviour
{
private TransformAccessArray tranAccessArray;
private const int instanceCount = 100;
void Start()
{
tranAccessArray = new TransformAccessArray(instanceCount);
for (int i = 0; i < instanceCount; i++)
{
var go = GameObject.CreatePrimitive(PrimitiveType.Cube);
go.transform.position = Random.insideUnitSphere * 100;
tranAccessArray.Add(go.transform);
}
}
void Update()
{
var tempVelocity = new NativeArray<Vector3>(instanceCount, Allocator.TempJob);
for (int i = 0; i < tempVelocity.Length; i++)
{
tempVelocity[i] = Random.insideUnitSphere;
}
var job = new TransformJob() { Velocity = tempVelocity };
job.Schedule(tranAccessArray)// 这里传入TransformAccessArray
.Complete();
tempVelocity.Dispose();
}
private void OnDestroy()
{
tranAccessArray.Dispose();// 需要Dispose!
}
}