当前位置:首页 > 其他 > 正文内容

Unity ECS System在什么时候更新?怎么自定义这个更新的机遇?

邻居的猫1个月前 (12-09)其他1701

在什么时候更新?

在其他用户代码都履行完之后。

去Netcode的ClientServerBootstrap里能够找到CreateLocalWorld函数,里边有相似这样的代码:

public static World CreateLocalWorld(string defaultWorldName = "Default World")
{
    var world = new World(defaultWorldName, WorldFlags.Game);

    var systems = DefaultWorldInitialization.GetAllSystems(WorldSystemFilterFlags.Default);
    DefaultWorldInitialization.AddSystemsToRootLevelSystemGroups(world, systems);
    ScriptBehaviourUpdateOrder.AppendWorldToCurrentPlayerLoop(world);

    return world;
}

其间ScriptBehaviourUpdateOrder.AppendWorldToCurrentPlayerLoop便是将World更新附加到UnityEngine.LowLevel.PlayerLoop后边的函数。这个函数内容也很简单,本质上是经过world.GetExistingSystemManaged别离取得InitializationSystemGroupSimulationSystemGroupPresentationSystemGroup;然后作为PlayerLoopSystem的SubSystem,结构出新的PlayerLoop之后,经过PlayerLoop.SetPlayerLoop应用到当时环境里。

没有Netcode的情况下也是相似的,只不过是经过DefaultWorldInitialization这个类来完成了。

怎样自定义?

知道在哪里创立的,天然就知道该怎样自定义了。只要把ScriptBehaviourUpdateOrder.AppendWorldToCurrentPlayerLoop换成自己的东西就行了。比方:

var initGroup = world.GetExistingSystemManaged<InitializationSystemGroup>();
var simGroup = world.GetExistingSystemManaged<SimulationSystemGroup>();
var presGroup = world.GetExistingSystemManaged<PresentationSystemGroup>();

//找个当地调用initGroup.Update()
//找个当地调用simGroup.Update()
//找个当地调用presGroup.Update()
//次序不要搞错了

以FishNet为例,就能够在TimeManager.OnPostTick里运转一切WorldSystemFilterFlags.ServerSimulation的System,所以这些根据GameObject的网络库也就能够用ECS规划形式了。
不过自定义了更新之后,在Editor的Systems界面里就看不到了,也算是一个小缺陷吧。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=703

分享给朋友:

“Unity ECS System在什么时候更新?怎么自定义这个更新的机遇?” 的相关文章

【知识点】一文讲清动态规划的实质

【知识点】一文讲清动态规划的实质

一文讲清动态规划的实质 动态规划 Dynamic Programming (DP) 是算法范畴的中心思维之一,却一起也是让许多学习者感到扎手的难点之一。动态规划的难点在于它不是简略的数学推导,也不单纯检测人们的程序规划才能,而更像是一种从思维办法到问题建模的一次深入练习。 本文将从动态规划的界说动身...

门罗币隐私维护之环签名

门罗币隐私维护之环签名

主页 微信大众号:暗码应用技能实战 博客园主页:https://www.cnblogs.com/informatics/ GIT地址:https://github.com/warm3snow 简介 在《门罗币隐私维护之隐形地址》文章中,咱们要点介绍了门罗币Monero的隐形地址技能,门罗币经过隐...

区块链中心化,区块链中心化的挑战与机遇

区块链技术本身是一个分布式账本技术,它旨在通过去中心化的方式记录和验证交易,从而提高透明度和安全性。区块链系统在实施过程中可能会出现不同程度的中心化现象,这取决于具体的应用场景、技术实现和治理结构。中心化在区块链中的表现形式可能包括:1. 矿池中心化:在加密货币挖矿过程中,矿池通过集合多个矿工的计算...

开源系统linux,Linux系统的魅力与价值

开源系统linux,Linux系统的魅力与价值

Linux 是一个开源操作系统,它基于 Unix 操作系统,最初由芬兰的 Linus Torvalds 开发。Linux 是自由软件和开源软件发展中最著名的例子。与微软的 Windows 或苹果的 macOS 不同,Linux 是一个开源项目,这意味着它的源代码是公开的,任何人都可以自由地查看、修改...

虚拟化与云计算的关系,技术融合与未来展望

虚拟化与云计算的关系,技术融合与未来展望

虚拟化与云计算是计算机科学和信息技术领域中两个紧密相关的概念,它们相互促进,共同推动着信息技术的发展。虚拟化是一种技术,它允许在单个物理服务器上创建多个虚拟服务器,每个虚拟服务器都拥有自己的操作系统和应用程序。虚拟化技术可以提高服务器的利用率,降低成本,并提高灵活性。云计算是一种计算模式,它允许用户...

国内云计算排名,竞争激烈,格局逐渐清晰

国内云计算排名,竞争激烈,格局逐渐清晰

根据最新的市场报告和排名,以下是2023年中国大陆云计算市场的排名情况:1. 阿里云:继续保持领先地位,市场份额最大,占据了中国大陆云服务市场的36%。2. 华为云:紧随其后,市场份额显著,与阿里云和腾讯云共同占据了市场的主导地位。3. 腾讯云:同样位列前三,与阿里云和华为云共同占据了市场的主导地位...