unity DOTS的学习总结之Job System

这篇文章是笔者对网上DOTS相关资料的总结,主要来自UNITY官方直播和unity社区的资料,还有其他网上同好的分享。如有纰漏,望读者指正,谢谢。
DOTS是什么?
DOTS全名:Data-Oriented Tech Stack(DOTS),即多线程式数据导向型技术堆栈。
简单来说,就是UNITY提供了一个高性能编程的解决方案,其中包含三个组成。
1)C#任务系统(Job System):用来方便地写出高效的多线程代码。
2)实体组件系统(ECS):一个用来实现高性能的实体框架。(类似原来的游戏对象组件系统)
3)Busrt编译器:用来生成高度优化的C#代码。HPC#(high preformance C#)。
这三个方案实际上各自独立各有优缺点,可根据实际情况组合使用。

DOTS能干什么呢?
由于DOTS只是一个提高性能的解决方案,可以应用各种场景,比如:
1) 用在网络通信上——Unity的NetCode 。
2) 用在网页和微信小程序那种小游戏——unity的Tiny项目。
3) 用在传统的3A游戏上——《守望先锋》。

DOTS是怎么优化游戏性能呢?接下来就依次对DOTS的三大部分来分析。

C#任务系统(JobSystem)

现在的CPU基本都是多核处理器。即使是笔者手中的千元机的骁龙430也号称8核处理器。但是大部分游戏都是单线程的,而少用多线程或进行多核优化的。一方面是多线程编程有难点,另一方面现在游戏基本是一条主线走下来,每个主要的游戏物体之间互相关联互动,用多线程如何处理分割这些逻辑上的依赖关系也是一个多线程编程的难点。
那么unity的JobSystem是怎么解决的呢。
在这里插入图片描述在这里插入图片描述
以我浅薄地理解就是开发者按照unity的jobSystem的语法写好Job,之后的分配和依赖问题交给jobSystem就好了,简单高效。

那么怎么创建一个Job呢?
以下是一个Job的示例代码:

[BurstCompile]//启用brust编译,之后会总结
public struct MyJob1:IJob//Job是结构体,实现一个IJob的接口
{
   
	[ReadOnly] public int left;
	[ReadOnly] public int right;//两个readonly的数据为输入数据
	[WriteOnly] public NativeArray<int> @out;//writeOnly为输出数据
	public void Execute()//要另开个线程来计算的逻辑代码放到这个方法里
	{
   
		@Out[0] = left * right;//这里简单地计算下输入数据的乘积
	}
}

private void Start()
{
   
	MyJob1 myJob = new MyJob1();//创建一个Job
	myJob.left = 2;//输入
	myJob.right = 3;//输入
	myJob.@out = new NativeArray<int>(1
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity DOTS(DOTS: Data-Oriented Technology Stack)是Unity的一种数据导向技术堆栈,它旨在提高游戏性能和可扩展性。它基于实体组件系统(Entity-Component-System,ECS)的概念,其中游戏对象被拆分为实体(Entity)和组件(Component),并通过系统(System)进行处理。 在Unity DOTS中,可以使用实体组件系统来管理和处理游戏对象。通过将游戏对象转换为实体和组件的形式,可以实现高效的数据处理和并行计算。例如,在创建实体时,可以使用GameObjectConversionUtility.ConvertGameObjectHierarchy函数将GameObject转换为Entity,并使用IConvertGameObjectToEntity接口进行自定义转换。然后,可以使用系统(System)对实体和组件进行处理,例如旋转方块事件。 Unity DOTS的优势包括更高的性能,更好的可扩展性和更方便的并行计算。通过采用数据导向的设计,可以减少内存访问和数据处理的开销,从而提高游戏的帧率和响应性。 总而言之,Unity DOTS是一种数据导向的技术堆栈,通过实体组件系统和并行计算来提高游戏性能和可扩展性。它可以通过转换游戏对象为实体和组件的形式,并使用系统进行处理来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [UnityDots技术入门](https://blog.csdn.net/m0_37920739/article/details/108181541)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Unity DOTS简明教程](https://blog.csdn.net/mango9126/article/details/105219215)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值