Unity DOTS1.0(9) Struct Change

2024-05-06 17:12
文章标签 unity change struct dots1.0

本文主要是介绍Unity DOTS1.0(9) Struct Change,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Struct Change

概念:

  • 一些引发了unity重新排列chunk内存,改变了chunk数据内容的一些操作,叫做structural changes。
  • 这个操作消耗很大,并且只能在主线程里面运行。所以了解清楚很重要

导致Struct Change的操作:

1. 创建一个Entity

  • 当你创建一个entity的时候,unity找一个已存在的chunk上给分配一块可以使用的内存给ComponentData;如果不存在空闲的chunk了,就会创建一块新的chunk来给entity作为ComponentData内存块(ArchType)来使用。

2. 销毁一个Entity

  • 当一个entity被删除的时候,它在chunk里面的内存也会空出来。因为连续遍历enity的时候,不能有空档。所以Unity就把最后一个entity的数据,拷贝到刚才空出来的内存块,然后把最后的那一个空出来用于下一次entity的创建。
    • 如果这个chunk,没有任何一个entity了,那么这个时候chunk的16Kib内存,就会被释放,还给系统;

3. 添加或者删除组件

  • 当一个entity执行添加或者删除组件后,它的ArchType就变化了,这时候就需要把这个entity迁移到和它一样ArchType的Chunk中。
    • 这个迁移是进行了一次拷贝
    • 最后再删除原来entity在chunk中的内存块。

当产生Struct Change时, 如何处理:

1.同步点Sync Point

  • 请求一个Sync Point,这是一个程序执行点,它会等待所有的被调度的job thread执行完成以后,再继续执行依赖entity数据的job thread。
  • 在等待的这段时间内,其它的工作线程的调度将会变得不可用,直到structural changes完成;
  • 而且所有相关组件的引用都失效
  • 所以需要要尽可能减少Unity进行sync point这种操作, 而struct change是sync point导致这个操作的主要原因。

2.如何避免Sync Point

  • 避免马上就去做struct change,而是把它放到一个队列里面一起做,本帧结束以后一起做;
  • 当在一个job里面想做一个struct change,可以把这个请求通过command buffer请求出来,等待在main thread里面统一处理;

这篇关于Unity DOTS1.0(9) Struct Change的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964891

相关文章

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

fzu 2277 Change 线段树

Problem 2277 Change Time Limit: 2000 mSec    Memory Limit : 262144 KB  Problem Description There is a rooted tree with n nodes, number from 1-n. Root’s number is 1.Each node has a value ai.

C和指针:结构体(struct)和联合(union)

结构体和联合 结构体 结构体包含一些数据成员,每个成员可能具有不同的类型。 数组的元素长度相同,可以通过下标访问(转换为指针)。但是结构体的成员可能长度不同,所以不能用下标来访问它们。成员有自己的名字,可以通过名字访问成员。 结构声明 在声明结构时,必须列出它包含的所有成员。 struct tag {member-list} variable-list ; 定义一个结构体变量x(包含

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

时间序列|change point detection

change point detection 被称为变点检测,其基本定义是在一个序列或过程中,当某个统计特性(分布类型、分布参数)在某时间点受系统性因素而非偶然因素影响发生变化,我们就称该时间点为变点。变点识别即利用统计量或统计方法或机器学习方法将该变点位置估计出来。 Change Point Detection的类型 online 指连续观察某一随机过程,监测到变点时停止检验,不运用到

Unity协程搭配队列开发Tips弹窗模块

概述 在Unity游戏开发过程中,提示系统是提升用户体验的重要组成部分。一个设计良好的提示窗口不仅能及时传达信息给玩家,还应当做到不干扰游戏流程。本文将探讨如何使用Unity的协程(Coroutine)配合队列(Queue)数据结构来构建一个高效且可扩展的Tips弹窗模块。 技术模块介绍 1. Unity协程(Coroutines) 协程是Unity中的一种特殊函数类型,允许异步操作的实现

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位