当前位置: 首页 > news >正文

【Unity3D】ECS入门学习(十一)ComponentSystem、JobComponentSystem

 ComponentSystem:仅支持主线程执行,不支持多线程,并且无法使用SystemBase介绍的扩展方法。

using Unity.Entities;
using Unity.Transforms;
using Unity.Mathematics;/// <summary>
/// 仅主线程执行,不支持多线程
/// </summary>
public class MyComponentSystem : ComponentSystem
{protected override void OnUpdate(){Entities.ForEach((ref Translation trans) =>{trans.Value = new float3(0, 1, 1);});//无法使用SystemBase的其他扩展功能}
}

JobComponentSystem:仅支持多线程,不支持主线程,可以使用扩展方法,并且重写的方法与其他都不同,它需要一个JobHandle返回值 

using Unity.Entities;
using Unity.Jobs;
using Unity.Transforms;
/// <summary>
/// 支持多线程 但不支持主线程执行
/// </summary>
public class MyJobComponentSystem : JobComponentSystem
{protected override JobHandle OnUpdate(JobHandle inputDeps){return Entities.ForEach((ref Translation trans) =>{trans.Value = new Unity.Mathematics.float3(0, 0, 1);}).WithName("MyName").Schedule(inputDeps);//可以使用SystemBase扩展方法}
}

具体文档:Using Entities.ForEach | Entities | 0.50.1-preview.2

如下图是三个执行筛选的方法限制,简单理解就是:
Run:非Burst编译下 可访问所有成员,可修改实体。【主线程执行】
Schedule:仅能获取局部成员,可修改实体。【新开一个后台线程执行】
ScheduleParallel:仅能获取局部成员,可以读取实体,但不能修改实体,并且可读数据只允许存储到WithReadOnly(xxx)方法标记的只读变量内。【多线程并行执行】

Supported FeatureRunScheduleScheduleParallel
Capture local value typexxx
Capture local reference typex (only WithoutBurst and not in ISystem)
Writing to captured variablesx
Use field on the system classx (only WithoutBurst)
Methods on reference typesx (only WithoutBurst and not in ISystem)
Shared Componentsx (only WithoutBurst and not in ISystem)
Managed Componentsx (only WithoutBurst and not in ISystem)
Structural changesx (only WithStructuralChanges and not in ISystem)
SystemBase.GetComponentxxx
SystemBase.SetComponentxx
GetComponentDataFromEntityxxx (only as ReadOnly)
HasComponentxxx
WithDisposeOnCompletionxxx
WithScheduleGranularityx
http://www.lryc.cn/news/512966.html

相关文章:

  • 力扣刷题:栈和队列OJ篇(上)
  • XGPT用户帮助手册
  • Oracle 数据库 dmp文件从高版本导入低版本的问题处理
  • ShardingSphere-Proxy分表场景测试案例
  • 学技术学英文:Tomcat的线程模型调优
  • 创建flutter项目遇到无法连接源的问题
  • MAC系统QT图标踩坑记录
  • TF-IDF(Term Frequency-Inverse Document Frequency)详解:原理和python实现(中英双语)
  • 【竞技宝】CS2:HLTV2024职业选手排名TOP15-xantares
  • Spring-kafka快速Demo示例
  • 客户案例:基于慧集通集成平台,打通屠宰管理系统与用友U8C 系统的全攻略
  • 模型 九屏幕分析法
  • Qanything 2.0源码解析系列6 PDF解析逻辑
  • MAC系统QT Creator的快捷键
  • 【深度学习】多目标融合算法—样本Loss提权
  • C 实现植物大战僵尸(四)
  • Tailwind CSS:现代 CSS 框架的优雅之选
  • MyBatis 使用的设计模式详解
  • LabVIEW 中 NI Vision 模块的IMAQ Create VI
  • 2024 年度总结
  • STM32 高级 物联网通讯之LoRa通讯
  • 【笔记】在虚拟机中通过apache2给一个主机上配置多个web服务器
  • 数据库的创建与删除:理论与实践
  • 如何解决Eigen和CUDA版本不匹配引起的错误math_functions.hpp: No such file or directory
  • Mybatis 01
  • 前端页面展示本电脑的摄像头,并使用js获取摄像头列表
  • HTML5实现喜庆的新年快乐网页源码
  • Excel文件恢复教程:快速找回丢失数据!
  • 计算机网络-L2TP Over IPSec基础实验
  • 一个最简单的ios程序(object_c)的编写