版本: Unity 6 (6000.0)
语言English
  • C#

IJobParallelForTransform

UnityEngine.Jobs 中的接口

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每个建议的更改,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

一个接口,允许您对传递到作业中的所有变换的每个位置、旋转和缩放执行相同的独立操作。

using UnityEngine;
using Unity.Collections;
using Unity.Jobs;
using UnityEngine.Jobs;

class ApplyVelocitySample : MonoBehaviour { public struct VelocityJob : IJobParallelForTransform { // Jobs declare all data that will be accessed in the job // By declaring it as read only, multiple jobs are allowed to access the data in parallel [ReadOnly] public NativeArray<Vector3> velocity;

// Delta time must be copied to the job since jobs generally don't have a concept of a frame. // The main thread waits for the job same frame or next frame, but the job should do work deterministically // independent on when the job happens to run on the worker threads. public float deltaTime;

// The code actually running on the job public void Execute(int index, TransformAccess transform) { // Move the transforms based on delta time and velocity var pos = transform.position; pos += velocity[index] * deltaTime; transform.position = pos; } }

// Assign transforms in the inspector to be acted on by the job [SerializeField] public Transform[] m_Transforms; TransformAccessArray m_AccessArray;

void Awake() { // Store the transforms inside a TransformAccessArray instance, // so that the transforms can be accessed inside a job. m_AccessArray = new TransformAccessArray(m_Transforms); }

void OnDestroy() { // TransformAccessArrays must be disposed manually. m_AccessArray.Dispose(); }

public void Update() { var velocity = new NativeArray<Vector3>(m_Transforms.Length, Allocator.Persistent);

for (var i = 0; i < velocity.Length; ++i) velocity[i] = new Vector3(0f, 10f, 0f);

// Initialize the job data var job = new VelocityJob() { deltaTime = Time.deltaTime, velocity = velocity };

// Schedule a parallel-for-transform job. // The method takes a TransformAccessArray which contains the Transforms that will be acted on in the job. JobHandle jobHandle = job.Schedule(m_AccessArray);

// Ensure the job has completed. // It is not recommended to Complete a job immediately, // since that reduces the chance of having other jobs run in parallel with this one. // You optimally want to schedule a job early in a frame and then wait for it later in the frame. jobHandle.Complete();

Debug.Log(m_Transforms[0].position);

// Native arrays must be disposed manually. velocity.Dispose(); } }

公共方法

Execute针对特定迭代索引和变换执行工作。