5. 管辖权和兴趣

前一章:4. 部署和运行时

在虚幻引擎的单个服务器架构中,Actor 的管辖权存在于单个服务器;Actor 的属性从不会离开该服务器的内存。当您在 SpatialOS 游戏世界中使用多个服务端 worker 实例,每个实例只能访问该游戏世界的一部分。此访问权限由 worker 实例具有_管辖权_ 和_兴趣_ 的对象决定。

管辖权

每个 Actor 都需要一个 worker 实例来对其进行计算。如果游戏只有一个服务端 worker 实例 (GDK 默认设置),则此实例具有对所有 Actor 的管辖权。但是,如果您使用的是多个服务端 worker 实例,则一个 Actor 每次只能有一个 worker 实例可以对其写入。因此 SpatialOS 将确保对于任意一个 Actor,绝不会存在一个以上的服务端 worker 实例对其具有管辖权 (即能够向其发送相关更新)。

管辖权是一项责任,即执行 Actor 所需计算的责任。这同时适用于客户端 worker 和服务端 worker 实例;但是,只有服务端 worker 实例可以在它们之间共享具有多个管辖区域的游戏世界。当一个 Actor 从一个服务端 worker 实例的管辖区域移到另一个服务端 worker 实例的管辖区域时,该 Actor 的管辖权将迁移。这使第二个服务端 worker 实例可在第一个实例断开的位置继续。客户端 worker 实例通常被称为“客户端”。

兴趣

要执行与 Actor 关联的计算,服务端 worker 实例不仅需要对该 Actor 的管辖权,还需要了解它没有管辖权但与它具有管辖权的这个 Actor 相关的其他 Actor。

例如,当您的 NPC 在游戏世界中移动时,它可能需要根据附近的情况而表现出不同的行为。一只兔子可能会跑向附近的莴苣,也可能会远离附近的狐狸。即使对兔子来说,莴苣或狐狸位于不同的管辖区域,兔子仍需要表现出正确的行为。

为解决此问题,服务端 worker 实例需要具有兴趣。也就是说,它需要接收有关 Actor 的更新,即使它对其不具有管辖权。例如,一个服务端 worker 实例可能对其具有管辖权的 Actor 的方圆 100 米内的每个对象都感兴趣。

请注意,兴趣不仅适用于服务端 worker 实例:客户端 worker 实例可能也对附近的对象以及远处的大型对象感兴趣。它对遥远的山脉感兴趣,因为它需要渲染它们,以便玩家在玩游戏时可以看到远方山脉。

管辖权和兴趣的区别

管辖权意味着写入权限:一个 worker 实例执行与某个 Actor 相关的计算,并将与该 Actor 有关的更新发送到 SpatialOS 实体数据库,以便其他 worker 实例了解该 Actor 所发生的更改。

兴趣意味着读取权限:一个 worker 实例希望从 SpatialOS 实体数据库接收有关 Actor 的更新。


最近更新时间: October 13, 2021 (3ba4b549)