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

IJob

Unity.Jobs 中的接口

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

描述

一个允许您调度单个作业的接口,该作业与其他作业和主线程并行运行。

作业调度后,作业的 Execute 方法将在工作线程上调用。您可以使用返回的JobHandle来确保作业已完成。您还可以将 JobHandle 作为依赖项传递给其他作业,这将确保作业在工作线程上一个接一个地执行。

其他资源:IJobForExtensions.Schedule

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

class ApplyVelocitySample : MonoBehaviour { struct VelocityJob : IJob { // 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;

// By default containers are assumed to be read & write public NativeArray<Vector3> position;

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

// The code actually running on the job public void Execute() { // Move the positions based on delta time and velocity for (var i = 0; i < position.Length; i++) position[i] = position[i] + velocity[i] * deltaTime; } }

public void Update() { var position = new NativeArray<Vector3>(500, Allocator.Persistent);

var velocity = new NativeArray<Vector3>(500, Allocator.Persistent); for (var i = 0; i < velocity.Length; i++) velocity[i] = new Vector3(0, 10, 0);

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

// Schedule the job, returns the JobHandle which can be waited upon later on JobHandle jobHandle = job.Schedule();

// Ensure the job has completed // It is not recommended to Complete a job immediately, // since that gives you no actual parallelism. // You optimally want to schedule a job early in a frame and then wait for it later in the frame. jobHandle.Complete();

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

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

公共方法

Execute实现此方法以在工作线程上执行工作。