Unity2013.1.19_DOTS_Burst compiler
DOTS是一种新产品,现在尚在起步阶段。由于它处于持续发展中,随着我们努力使其达到最佳状态,您将看到API会不断演变和日趋成熟。
DOTS包含以下元素:
-
实体组件系统(ECS) - 提供使用面向数据的方法进行编码的框架。它通过Entities软件包进行分发,您可以通过Package Manager来添加编辑器。
-
C#作业系统 - 提供一种生成多线程代码的简单方法。它通过Jobs软件包进行分发。
-
Burst编译器 - 可生成快速、优化的本机代码。它通过Burst软件包进行分发,可通过Package Manager在编辑器中使用。
-
本机容器 - 属于ECS数据结构,可提供对内存的控制。
继续跟进DOTS的第三个部分Burst compiler。官方是正道。
Unity - Manual: Burst (unity3d.com)
Burst compiler简介
Burst设计Burst compiler是和JobSystem一起工作的。
在你的代码中使用Burst compiler,先用 [BurstCompile]属性封装一个 Job struct 。
再添加[BurstCompile]
到你想要Burst编译的类型和静态方法中。
Burst compiles your code just-in-time (JIT) while in Play mode in the Editor, and ahead-of-time (AOT) when your application runs in a Player. For more information on compilation, see Burst compilation
using Unity.Burst;
using Unity.Collections;
using Unity.Jobs;
using UnityEngine;
public class MyBurst2Behavior : MonoBehaviour
{
void Start()
{
var input = new NativeArray<float>(10, Allocator.Persistent);
var output = new NativeArray<float>(1, Allocator.Persistent);
for (int i = 0; i < input.Length; i++)
input[i] = 1.0f * i;
var job = new MyJob
{
Input = input,
Output = output
};
job.Schedule().Complete();
Debug.Log("The result of the sum is: " + output[0]);
input.Dispose();
output.Dispose();
}
// Using BurstCompile to compile a Job with Burst
[BurstCompile]
private struct MyJob : IJob
{
[ReadOnly]
public NativeArray<float> Input;
[WriteOnly]
public NativeArray<float> Output;
public void Execute()
{
float result = 0.0f;
for (int i = 0; i < Input.Length; i++)
{
result += Input[i];
}
Output[0] = result;
}
}
}
参考文档:
官方:
About Burst | Burst | 1.8.12 (unity3d.com)
Unity 之Burst Compile底层原理 - 知乎 (zhihu.com)
Unity Live Help
什么是DOTS?为什么说DOTS非常重要? - Unity Learn
Unity-Technologies/ECS-Network-Racing-Sample: ECS multiplayer racing sample to showcase using Unity Entities and netcode with best practices (github.com)
ECS系列教程:
UnityECS_嵩小帽子啊的博客-CSDN博客[Unity ECS入门]8.System执行顺序-ECS入门-笨木头与游戏开发 (benmutou.com)