【Dots之004】ISystem执行流程

一、启动流程

1、在游戏启动或者Unity运行的时候,所有的System都会自动实例化且添加到default world中去;
2、当然如果不想System自动执行,可以加入宏UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP,那么System就不会自动执行了.
在这里插入图片描述

二、执行流程

1、首先OnCreate()
2、然后OnUpdate()

[BurstCompile]
public partial struct MoveSystem : ISystem
{
	[BurstCompile]
	public void OnCreate(ref SystemState state) { }


	[BurstCompile]
    public void OnUpdate(ref SystemState state) { }
}

3、但是还存在满足某种情况的前提下才能够执行OnUpdate()

[BurstCompile]
public partial struct MoveSystem : ISystem
{
	[BurstCompile]
	public void OnCreate(ref SystemState state) 
	{ 
		state.RequireForUpdate<Move>();
	} 

	[BurstCompile]
    public void OnUpdate(ref SystemState state) { }
}

这里执行OnUpdate()会受到OnCreate中RequireForUpdate的约束
state.RequireForUpdate()

  • 表示在游戏运行的时候,至少有一个Entity持有Move组件,才会执行Update;
  • 如果使用了RequireForUpdate(),那么就需要存在T这个组件,只有这个组件存在了,当前的System才会运行;

这样就可以灵活的控制什么时候System进行运行;满足条件的情况下才可以执行;

三、基本操作

用到了ISystem,那么这里就需要把BurstCompile也用上;
这里生效的前提是需要把Struct,OnCreate/OnDestroy/OnUpdate都需要添加上BurstCompile;
[BurstCompile]能够编译为本机最优代码,这个性能的提升还是很客观的;

如果OnUpdate里面有访问Managed Objects;那么是无法进行Burst-Compiled的;其它方法也同理;所以这个时候就没有必要加BurstCompile 属性了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值