【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 属性了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值