Unity 的 Job System 是一种多线程编程框架,可以显著提高 CPU 性能,适用于大量数据的并行处理场景,比如 AI、物理模拟、粒子系统等。下面是一份详细的新手向教程,帮助你从 0 上手 Unity Job System。
✅ 一、什么是 Unity Job System?
Unity 的 Job System 是基于 C# 的 轻量级多线程系统,让你写出高性能的并行代码。
它与 Burst Compiler 和 ECS (Entity Component System) 密切相关,但 Job System 也可以单独使用。
✅ 二、使用 Job System 的基本流程
定义一个
IJob
结构体(或其他 Job 接口)。实现 Job 的
Execute()
方法。创建 Job 实例并调用
Schedule()
。调用
jobHandle.Complete()
等待 Job 执行完成。
✅ 三、基础示例:让一个数组的每个元素乘 2
🔧 1. 引入命名空间
using Unity.Burst;
using Unity.Collections;
using Unity.Jobs;
using UnityEngine;
🔧 2. 编写 Job 结构体
[BurstCompile] // 可选:使用 Burst 编译器优化性能
public struct MultiplyJob : IJob
{
public NativeArray<int> numbers;
public void Execute()
{
for (int i = 0; i < numbers.Length; i++)
{
numbers[i] *= 2;
}
}
}
🔧 3. 调用 Job 执行
public class JobExample : MonoBehaviour
{
private NativeArray<int> numbers;
void Start()
{
numbers = new NativeArray<int>(5, Allocator.TempJob);
for (int i = 0; i < numbers.Length; i++)
numbers[i] = i + 1;
MultiplyJob job = new MultiplyJob { numbers = numbers };
JobHandle handle = job.Schedule();
handle.Complete();
for (int i = 0; i < numbers.Length; i++)
Debug.Log(numbers[i]); // 输出:2 4 6 8 10
numbers.Dispose();
}
}
✅ 四、使用 IJobParallelFor
进行并行运算
用于大数据数组时推荐使用 IJobParallelFor
,自动并发处理每个索引。
[BurstCompile]
public struct MultiplyParallelJob : IJobParallelFor
{
public NativeArray<int> numbers;
public void Execute(int index)
{
numbers[index] *= 2;
}
}
public class ParallelJobExample : MonoBehaviour
{
NativeArray<int> numbers;
void Start()
{
numbers = new NativeArray<int>(100, Allocator.TempJob);
for (int i = 0; i < numbers.Length; i++) numbers[i] = i;
MultiplyParallelJob job = new MultiplyParallelJob { numbers = numbers };
JobHandle handle = job.Schedule(numbers.Length, 16); // 16: batch size
handle.Complete();
Debug.Log(numbers[10]); // 示例
numbers.Dispose();
}
}
✅ 五、Job 类型对比
✅ 六、注意事项
NativeArray
一定要Dispose()
。Job 是“值类型”,不支持引用类型(class)。
Job 不能访问 UnityEngine 的 API(如
transform.position
),因为它不是线程安全的。Job 必须在主线程上
Schedule()
,不可在其他线程中调度。多 Job 可以用
JobHandle.CombineDependencies()
合并。
✅ 七、进阶建议
✅ 八、官方资源推荐
Burst Compiler 介绍:https://docs.unity3d.com/Packages/com.unity.burst@latest
Unity Learn 教程:https://learn.unity.com/
是否需要我:
✅ 提供一个完整可运行的 Job System 示例工程?
✅ 生成一个图示流程图帮你理解 Job 生命周期?
✅ 帮你把项目中的代码改造成 Job System 版本?
欢迎继续提问!