All notable changes to the SpatialOS Game Development Kit for Unreal will be documented in this file.
The format of this Changelog is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Note: Since GDK for Unreal v0.8.0, the changelog is published in both English and Chinese. The Chinese version of each changelog is shown after its English version.
注意:自虚幻引擎开发套件 v0.8.0 版本起,其日志提供中英文两个版本。每个日志的中文版本都置于英文版本之后。
- Replicated properties that use the
COND_SkipOwner
replication condition can still replicate in the first few frames of an Actor becoming owned. - Microsoft have fixed a defect in MSVC that previously caused errors when building Unreal Engine. We documented a workaround for this issue in GDK version
0.7.0-preview
. If you set up the GDK on your computer between the release of0.7.0
and0.10.0
, you have performed this workaround, which is no longer necessary. To undo this workaround, follow these steps:
- Open Visual Studio Installer.
- Select Modify on your Visual Studio 2019 installation.
- In the Installation details section, clear all the checkboxes for workloads and components except Visual Studio Code editor.
- In the Workloads tab, select the following items:
- Universal Windows Platform development
- .NET desktop development (You must also select the .NET Framework 4.6.2 development tools.)
- Desktop development with C++
- Select Modify to confirm your changes.
- We've deprecated the
preview
branches. We now only release the GDK to therelease
branch, which is fully tested, stable, and documented. If you have thepreview
branches checked out, you must check outrelease
to receive the latest changes. - The SpatialOS Runtime Standard variant requires the latest version of the SpatialOS CLI. Run
spatial update
to get the latest version. - Old snapshots are incompatible with version 0.10 of the GDK. You must generate new snapshots after upgrading to 0.10.
- The old Inspector is incompatible with the SpatialOS Runtime Standard variant. The Standard variant uses the new Inspector by default.
- We’ve removed
Singleton
as a class specifier, and you need to remove your uses of it. You can achieve the behavior of former Singleton Actors by ensuring that your Actor is spawned once by a single server-worker instance in your deployment. - We’ve renamed
OnConnected
andOnConnectionFailed
(onSpatialGameInstance
) toOnSpatialConnected
andOnSpatialConnectionFailed
. They are now also Blueprint-assignable. - The
GenerateSchema
andGenerateSchemaAndSnapshots
commandlets do not generate schema any more. We’ve deprecated them in favor ofCookAndGenerateSchemaCommandlet
. (GenerateSchemaAndSnapshots
still works if you use the-SkipSchema
option.) - We’ve combined the settings for offloading and load balancing and moved them from the Editor and Runtime Settings to be per map in the World Settings. For more information, see the offloading tutorial.
- We’ve removed the command-line arguments
OverrideSpatialOffloading
andOverrideLoadBalancer
, and GDK load balancing is always enabled. To override a map'sEnable Multi Worker
setting, use the command-line flagOverrideMultiWorker
. - It is now mandatory to run a deployment with result types (previously result types were enabled by default). We’ve removed the Runtime setting
bEnableResultTypes
to reflect this. - Whether an Actor is offloaded depends on whether the root owner of that Actor is offloaded. This might affect you if you're using functions such as
IsActorGroupOwnerForActor
. - We’ve removed
QueuedOutgoingRPCWaitTime
. All RPC failure cases are now correctly queued or dropped. - We’ve removed
Max connection capacity limit
andLogin rate limit
from the generated worker configuration file, because we no longer support them. - We no longer support secure worker connections when you run your game within the Unreal Editor. We still support secure worker connections for packaged builds.
- The GDK now uses the SpatialOS Worker SDK version
14.6.1
. - Added support for the SpatialOS Runtime Standard variant, version 0.4.3.
- Added support for the SpatialOS Runtime Compatibility Mode variant, version
14.5.4
. - Added a new drop-down menu in Editor Settings so that you can select which SpatialOS Runtime variant to use. The two variants are Standard and Compatibility Mode. For Windows users, Standard is the default, but you can use Compatibility Mode if you experience networking issues when you upgrade to the latest GDK version. For macOS users, Compatibility Mode is the default, and you can’t use Standard. For more information, see Runtime variants.
- Added new default game templates. Your default game template depends on the SpatialOS Runtime variant that you have selected, and on your primary deployment region.
- The SpatialOS Runtime Standard variant uses the new Inspector by default, and is incompatible with the old Inspector. (The Compatibility Mode variant uses the old Inspector by default, and is incompatible with the new Inspector.)
- The Example Project has a new default game mode: Control. This game mode replaces Deathmatch. In Control, two teams compete to capture control points on the map. NPCs guard the control points, and if you capture an NPC’s control point, then the NPC joins your team.
- You can now generate valid schema for classes that start with a leading digit. The generated schema classes are prefixed with
ZZ
internally. - Handover properties are now automatically replicated when this is required for load balancing.
bEnableHandover
is off by default. - Added
OnSpatialPlayerSpawnFailed
delegate toSpatialGameInstance
. This is useful if you have established a successful connection from the client-worker instance to the SpatialOS Runtime, but the server-worker instance crashed. - Added
bWorkerFlushAfterOutgoingNetworkOp
(default false) which sends RPCs and property replication changes over the network immediately, to allow for lower latencies. You can use this withbRunSpatialWorkerConnectionOnGameThread
to achieve the lowest available latency at a trade-off with bandwidth. - You can now edit the project name field in the
Cloud Deployment Configuration
dialog box. Changes that you make here are reflected in your project'sspatialos.json
file. - You now define worker types in Runtime Settings.
- Local deployments now use the map's load balancing strategy to get the launch configuration settings. The launch configuration file is saved per map in the
Intermediate/Improbable
folder. - Added a
Launch Configuration Editor
under the Cloud toolbar button. - In the
Cloud Deployment Configuration
dialog box you can now generate a launch configuration file from the current map, or you can click through to theLaunch Configuration Editor
. - You can now specify worker load in game logic by using
SpatialMetrics::SetWorkerLoadDelegate
. - You can now specify deployment tags in the
Cloud Deployment Configuration
dialog box. - You can now execute RPCs that were declared in a
UInterface
. Previously, this caused a runtime assertion. - Full Scan schema generation now uses the
CookAndGenerateSchema
commandlet, which results in faster and more stable schema generation for big projects. - Added an
Open Deployment Page
button to theCloud Deployment Configuration
dialog box. - The
Start Deployment
button in theCloud Deployment Configuration
dialog box now generates schema and a snapshot, builds all selected workers, and uploads the assembly before starting the deployment. There are checkboxes so that you can choose whether to generate schema and a snapshot, and whether to build the game client and add simulated players. - When you start a cloud deployment from the Unreal Editor, the cloud deployment now automatically has the dev_login deployment tag.
- Several command-line parameter changes:
- Renamed the
enableProtocolLogging
command-line parameter toenableWorkerSDKProtocolLogging
. - Added a parameter named enableWorkerSDKOpLogging so that you can log user-level ops.
- Renamed the
protocolLoggingPrefix
parameter to workerSDKLogPrefix. This prefix is used for both protocol logging and op logging. - Added a parameter named
workerSDKLogLevel
that takes the argumentsdebug
,info
,warning
, anderror
. - Added a parameter named
workerSDKLogFileSize
to control the maximum file size of the Worker SDK log file.
- Renamed the
- The icon on the
Start Deployment
toolbar button now changes depending on the connection flow that you select. - Created a new drop-down menu in the GDK toolbar. You can use it to configure how to connect your PIE client or your Launch on Device client:
- Choose between
Connect to a local deployment
andConnect to a cloud deployment
to specify the flow that the client should automatically use when you selectPlay
orLaunch
. - Added the
Local Deployment IP
field to specify which local deployment the client should connect to. By default, the IP is127.0.0.1
. - Added the
Cloud deployment name
field to specify which cloud deployment the client should connect to. If you select Connect to cloud deployment but you don’t specify a cloud deployment, the client tries to connect to the first running deployment that has thedev_login
deployment tag. - Added the
Editor Settings
field so that you can quickly access the SpatialOS Editor Settings.
- Choose between
- Added the
Build Client Worker
andBuild Simulated Player
checkboxes to theConnection
drop-down menu, so that you can quickly choose whether to build and include the client-worker instance and simulated player worker instance in the assembly. - Updated the GDK toolbar icons.
- When you specify a URL to connect a client to a deployment using the Receptionist, the URL port option is now respected. - --- However, in certain circumstances, the initial connection attempt uses the
-receptionistPort
command-line argument. - When you run
BuildWorker.bat
withclient
, this now builds the client target of your project. - When you change the project name in the
Cloud Deployment Configuration
dialog box, this automatically regenerates the development authentication token. - Changed the names of the following toolbar buttons:
Start
is now calledStart Deployment
Deploy
is now calledCloud
- Marked all the required fields in the
Cloud Deployment Configuration
dialog box with asterisks. - You can now change the project name in Editor Settings.
- Replaced the
Generate from current map
button in theCloud Deployment Configuration
dialog box with a checkbox labelledAutomatically Generate Launch Configuration
. If you select this checkbox, the GDK generates an up-to-date launch configuration file from the current map when you selectStart Deployment
. - Android and iOS are now in preview. We support workflows for developing and doing in-studio playtests on Android and iOS devices, and have documentation for these workflows. We also support macOS (also in preview) for developing and testing iOS game clients.
- Fixed a problem that caused load balanced cloud deployments to fail to start while under heavy load.
- Fix to avoid using packages that are still being processed in the asynchronous loading thread.
- Fixed a bug that sometimes caused GDK setup scripts to fail to unzip dependencies.
- Fixed a bug where RPCs that were called before calling the
CreateEntityRequest
were not processed as early as possible in the RPC ring buffer system, resulting in startup delays on the client. - Fixed a crash that occurred when running a game with
nullrhi
and usingSpatialDebugger
. - When you use a URL with options in the command line, we now parse the Receptionist parameters correctly, using the URL if necessary.
- Fixed a bug that occurred when creating multiple dynamic subobjects at the same time, and caused them to fail to be created on clients.
OwnerOnly
components are now properly replicated when a worker instance gains authority over an Actor. Previously, they were sometimes only replicated when a value on them changed (after the worker instance had already gained authority).- Fixed a rare server crash that could occur when closing an Actor channel immediately after attaching a dynamic subobject to that Actor.
- Fixed a defect in
InstallGDK.bat
that sometimes caused it to incorrectly reportError: Could not clone…
when repositories were cloned correctly. - Actors from the same ownership hierarchy are now handled together when they are load balanced.
If you are using the Standard Runtime variant, note the following compatibility issues:
- The old Inspector won’t work. You must use the new Inspector instead.
- In the Platform SDK in C#, you can’t set capacity limits or use the remote interaction service. You also can’t use the Platform SDK to take snapshots of cloud deployments, but we’ll fix this snapshot issue in a future release.
- You can't generate a snapshot of a cloud deployment. We'll fix this in a future release.
- In the CLI, the following commands don’t work:
spatial local worker replace
spatial project deployment worker replace
spatial local worker-flag set
spatial project deployment worker-flag delete
spatial project deployment worker-flag set
spatial cloud runtime flags set
(We’ll improve debug tooling and add functionality to dynamically change worker flag values in future releases.)
If you need any of the functionality mentioned above, change your Runtime variant to Compatibility Mode.
Features listed in this section are not ready to use. However, in the spirit of open development, we record every change that we make to the GDK.
- The SpatialOS GDK for Unreal is now released automatically using Buildkite CI. This should result in more frequent releases.
- Improbable now measures the non-functional characteristics of the GDK in Buildkite CI. This enables us to reason about and improve these characteristics. We track them as non-functional requirements (NFRs).
- After you upgrade to Unreal Engine
4.24.3
usinggit pull
, you might be left in a state where several.isph
and.ispc
files are missing. This state produces compile errors when you build the engine. You can fix this by runninggit restore .
in the root of yourUnrealEngine
repository.
- Simulated player worker configurations now require a development authentication token and deployment flag instead of a login token and player identity token. See the Example Project for an example of how to set this up.
- We now support Unreal Engine
4.24.3
. You can find the4.24.3
version of our engine fork here. - Added a new variable:
QueuedOutgoingRPCWaitTime
. Outgoing RPCs are now dropped in the following three scenarios: more thanQueuedOutgoingRPCWaitTime
time has passed since the RPC was sent; the worker instance is never expected to have the authority required to receive the RPC (if you're using offloading or zoning); or the Actor that the RPC is sent to is being destroyed. - In local deployments of the Example Project, you can now launch simulated players with one click. To launch a single simulated player client, run
LaunchSimPlayerClient.bat
. To launch ten simulated player clients, runLaunch10SimPlayerClients.bat
. - Added support for the UE4 Network Profiler to measure relative size of RPC and Actor replication data.
- Added a
SpatialToggleMetricsDisplay
console command. You must enablebEnableMetricsDisplay
in order for the metrics display to be available. You must then must callSpatialToggleMetricsDisplay
on each client that you want the metrics display to be visible for. - Enabled compression in the Modular UDP networking stack.
- Switched off default RPC-packing. You can re-enable this in
SpatialGDKSettings
. - When you start a local deployment, we now check to see if the required Runtime port is blocked. If it is, we display a dialog box that asks whether you want to kill the process that is blocking the port.
- A configurable Actor component
SpatialPingComponent
is now available. This enables PlayerControllers to measure the ping time to the server-worker instances that have authority over them. You can access the latest raw ping value viaGetPing()
, or access the rolling average, which is stored inPlayerState
. - You can invoke the
GenerateSchema
,GenerateSchemaAndSnapshots
, andCookAndGenerateSchema
commandlets with the-AdditionalSchemaCompilerArguments="..."
command line switch to output additional compiled schema formats. If you don't provide this switch, the output contains only the schema descriptor. This switch's value should be a subset of the arguments that you can pass to the schema compiler directly (for example--bundle_out="path/to/bundle.sb"
). You can see a full list of possible values in the schema compiler documentation - Added the
AllowUnresolvedParameters
function flag. This flag disables warnings that occur during processing of RPCs that have unresolved parameters. To enable this flag, use Blueprints, or add a tag to theUFUNCTION
macro. - There is now a warning if you launch a cloud deployment with the
manual_worker_connection_only
flag set totrue
. - We now support server travel for single-server game worlds. We don't support server travel for game worlds that use zoning or offloading.
- Improved the workflow relating to schema generation issues when you launch local deployments. There is now a warning if you try to launch a local deployment after a schema error.
DeploymentLauncher
can now launch a simulated player deployment independently from the target deployment. Usage:DeploymentLauncher createsim <project-name> <assembly-name> <target-deployment-name> <sim-deployment-name> <sim-deployment-json> <sim-deployment-region> <num-sim-players> <auto-connect>
- We now use
HeartbeatTimeoutWithEditorSeconds
ifWITH_EDITOR
is defined. This prevents worker instances from disconnecting when you're running them from the Unreal Editor for debugging. - Added the
bAsyncLoadNewClassesOnEntityCheckout
setting toSpatialGDKSettings
. This allows worker instances to load new classes asynchronously when they are receiving the initial updates about an entity. It isfalse
by default. - Added
IndexYFromSchema
functions for theCoordinates
,WorkerRequirementSet
,FRotator
, andFVector
classes. We've remapped theGetYFromSchema
functions for the same classes to invokeIndexYFromSchema
internally, in line with other implementations of the pattern. - Clients now validate their schema files against the schema files on the server, and log a warning if the files do not match.
- Entries in the schema database are now sorted to improve efficiency when searching for assets in the Unreal Editor. (DW-Sebastien)
BatchSpatialPositionUpdates
inSpatialGDKSettings
now defaults to false.- Added
bEnableNetCullDistanceInterest
(defaulttrue
) to enable client interest to be exposed through component tagging. This functionality has closer parity to native Unreal client interest. - Added
bEnableNetCullDistanceFrequency
(defaultfalse
) to enable client interest queries to use frequency. You can configure this functionality usingInterestRangeFrequencyPairs
andFullFrequencyNetCullDistanceRatio
. - Introduced the feature flag
bEnableResultTypes
(defaulttrue
). This configures interest queries to include only the set of components required for the queries to run. Depending on your game, this might save bandwidth. - If you set the
bEnableResultTypes
flag totrue
, this disables dynamic interest overrides. - Moved the development authentication settings from the Runtime Settings panel to the Editor Settings panel.
- Added the option to use the development authentication flow with the command line.
- Added a button to generate a development authentication token inside the Unreal Editor. To use it, navigate to Edit > Project Setting > SpatialOS GDK for Unreal > Editor Settings > Cloud Connection.
- Added a new section where you can configure the launch arguments for running a client on a mobile device. To use it, navigate to Edit > Project Setting > SpatialOS GDK for Unreal > Editor Settings > Mobile.
- You can now choose which Runtime version to use (in the Runtime Settings) when you launch a local or cloud deployment.
- If you set the
--OverrideResultTypes
flag totrue
, server-worker instances no longer receive updates about server RPC components on Actors that they do not own. This should decrease bandwidth for server-worker instances in offloaded and zoned games. - The
InstallGDK
scripts nowgit clone
the correct version of theUnrealGDK
andUnrealGDKExampleProject
for theUnrealEngine
branch that you have checked out. They readUnrealGDKVersion.txt
andUnrealGDKExampleProjectVersion.txt
to determine what the correct branches are. - Removed the
bEnableServerQBI
property and the--OverrideServerInterest
flag. - Added custom warning timeouts for each RPC failure condition.
SpatialPingComponent
can now also report average ping measurements over a specified number of recent pings. You can usePingMeasurementsWindowSize
to specify how many measurements you want to record, and callGetAverageData
to get the measurement data. There is also a delegateOnRecordPing
that is broadcast whenever a new ping measurement is recorded.- The Spatial Output Log window now displays deployment startup errors.
- Added
bEnableClientQueriesOnServer
(default false) which makes the same queries on the server as it makes on clients, if the GDK for Unreal's load balancer is enabled. EnablebEnableClientQueriesOnServer
to avoid a situation in which clients receive updates about entities that the server doesn't receive updates about (which happens if the server's interest query is configured incorrectly). - We now log a warning when
AddPendingRPC
fails due toControllerChannelNotListening
. - When offloading is enabled, Actors have local authority (
ROLE_Authority
) on servers for longer periods of time, to allow more native Unreal functionality to work without problems. - When offloading is enabled, if you try to spawn Actors on a server that will not be the Actor Group owner for them, we now log an error and delete the Actors.
- The GDK now uses SpatialOS Runtime version 14.5.1 by default.
- Renamed the configuration setting
bPreventAutoConnectWithLocator
tobPreventClientCloudDeploymentAutoConnect
and moved it toSpatialGDKSettings
. To use this feature, enable the setting inSpatialGDKSettings
. - Made
USpatialMetrics::WorkerMetricsRecieved
static. - You can now connect to a local deployment by selecting Connect to a local deployment and specifying the local IP address of your computer in the Launch drop-down menu.
- Enabled RPC ring buffers by default. We'll remove the legacy RPC mode in a future release.
- Removed the
bPackRPCs
property and the--OverrideRPCPacking
flag. - Added
OnClientOwnershipGained
andOnClientOwnershipLost
events on Actors and Actor Components. These events trigger when an Actor is added to or removed from the ownership hierarchy of a client's PlayerController. - Automatically remove UE4CommandLine.txt after finishing a Launch on device session on an Android device (only UnrealEngine 4.24 or above). This is done to prevent the launch session command line from overriding the one built into the APK.
- Queued RPCs no longer spam logs when an entity is deleted.
- We now take the
OverrideSpatialNetworking
command line argument into account as early as possible (previously,LocalDeploymentManager
queriedbSpatialNetworking
before the command line was parsed). - Servers now maintain interest in
AlwaysRelevant
Actors. GetActorSpatialPosition
now returns the last spectator sync location while the player is spectating.- The default cloud launch configuration is now empty.
- Fixed a crash that happened when the GDK attempted to read schema from an unloaded class.
- We now properly handle (and eventually resolve) unresolved object references in replicated arrays of structs.
- Fixed a tombstone-related assert that could fire and bring down the Unreal Editor.
- If an Actor that is placed in the level with
bNetLoadOnClient=false
goes out of a worker instance's view, it is now reloaded if it comes back into view. - Fixed a crash in
SpatialDebugger
that was caused by the dereference of an invalid weak pointer. - Fixed a connection error that occurred when using
spatial cloud connect external
. - The command line argument
receptionistHost <URL>
no longer overrides connections to127.0.0.1
. - If you connect a worker instance to a deployment using the Locator, and you initiate a
ClientTravel
using a URL that requires the Receptionist, this now works correctly. - You can now access the worker flags via
USpatialStatics::GetWorkerFlag
instead ofUSpatialWorkerFlags::GetWorkerFlag
. - Fixed a crash in
SpatialDebugger
that occurs when GDK-space load balancing is disabled. - The schema database no longer fails to load previous saved state when working in the Unreal Editor.
- If you attempt to launch a cloud deployment, this now runs the
spatial auth
process as required. Previously the deployment would fail. - Made a minor spelling fix to the connection log message.
- The debug strings in
GlobalStateManager
now display the Actor class name in log files. - The server no longer crashes when received RPCs are processed recursively.
- The GDK no longer crashes when
SoftObjectPointers
are not yet resolved, but instead serializes them as expected after they are resolved. - Fixed an issue that occurred when replicating a property for a class that was part of an asynchronously-loaded package, when the package had not finished loading.
- Fixed component interest constraints that are constructed from schema.
- The GDK now tracks properties that contain references to replicated Actors, so that it can resolve them again if the Actor that they reference moves out of and back into relevance.
- PIE sessions no longer occasionally fail to start due to missing schema for the
SpatialDebugger
Blueprint. - Fixed an issue where a newly-created subobject had empty state when
RepNotify
was called for a property pointing to that subobject. - Fixed an issue where deleted, initially dormant startup Actors would still be present on other worker instances.
- We now force-activate the RPC ring buffer when load balancing is enabled, to allow RPC handover when authority changes.
- Fixed a race condition where a client that was leaving the deployment could leave its Actor behind on the server, to be cleaned up after a long timeout.
- Fixed a crash that was caused by state in
SpatialGameInstance
persisting across a transition from one deployment to another. - The GDK no longer crashes when you start and stop PIE clients multiple times.
- The GDK no longer crashes when shadow data is uninitialized when resolving unresolved objects.
- Fixed an occasional issue when sending component RPCs on a recently-created Actor.
Features listed in this section are not ready to use. However, in the spirit of open development, we record every change that we make to the GDK.
- Enabled the SpatialOS toolbar for MacOS.
- Added support for Android.
SpatialDebugger
worker regions are now cuboids rather than planes, and can have theirWorkerRegionVerticalScale
adjusted via a setting in theSpatialDebugger
.- Added an
AuthorityIntent
component, aVirtualWorkerTranslation
component, and a partial framework. We'll use these in the future to control load balancing. - Load balancing strategies and locking strategies can be set per-level using
SpatialWorldSettings
. - Added a new Runtime Settings flag to enable the GDK for Unreal load balancer. This is a feature that is in development and not yet ready for general use. Enabling the GDK for Unreal load balancer now creates a single query per server-worker instance, depending on the defined load balancing strategy.
- Extracted the logic responsible for taking an Actor and generating the array of SpatialOS components that represents it as an entity in SpatialOS. This logic is now in
EntityFactory
. DeploymentLauncher
can now parse a .pb.json launch configuration.
@DW-Sebastien
- SpatialOS GDK for Unreal > Editor Settings > Region Settings has been moved to SpatialOS GDK for Unreal > Runtime Settings > Region Settings.
- You can now choose which SpatialOS service region you want to use by adjusting the Region where services are located setting. You must use the service region that you're geographically located in.
- Deployments can now be launched in China, when the Region where services are located is set to
CN
. - Updated the version of the local API service used by the UnrealGDK.
- The Spatial output log will now be open by default.
- The GDK now uses SpatialOS 14.5.0.
- Replicated references to newly created dynamic subobjects will now be resolved correctly.
- Fixed a bug that caused the local API service to memory leak.
- Cloud deployment flow will now correctly report errors when a deployment fails to launch due to a missing assembly.
- Errors are now correctly reported when you try to launch a cloud deployment without an assembly.
- The Start deployment button will no longer become greyed out when a
spatial auth login
process times out.
- UI 路径变更:SpatialOS GDK for Unreal > Editor Settings > Region Settings 移动到 SpatialOS GDK for Unreal > Runtime Settings > Region Settings 路径。
- 新增 SpatialOS 服务地区选项:通过调整 Region where services are located 设置,您可以选择想要使用的 SpatialOS 服务地区。您选择的服务地区必须是您所处的地理位置。
- 新增中国地区部署:通过将 Region where services are located 设置为
CN
,您可以在中国启动游戏部署。 - 本地 API 服务版本:虚幻引擎开发套件使用的本地 API 服务版本更新。
- SpatialOS 输出日志:SpatialOS 输出日志默认开启。
- 虚幻引擎开发套件现已使用 SpatialOS 14.5.0 版本。
- 修复对新创建的动态子对象的重复引用问题。
- 修复导致本地 API 服务内存泄漏的问题。
- 在没有程序集的情况下启动云部署时发生的错误,现已正确上报。
- 当
spatial auth login
进程超时,启动部署的按钮 (Start) 不再显示为灰色。
- SpatialOS GDK for Unreal > Editor Settings > Region Settings has been moved to SpatialOS GDK for Unreal > Runtime Settings > Region Settings.
- You can now choose which SpatialOS service region you want to use by adjusting the Region where services are located setting. You must use the service region that you're geographically located in.
- Deployments can now be launched in China, when the Region where services are located is set to
CN
.
- Updated the version of the local API service used by the UnrealGDK.
- The Spatial output log will now be open by default.
- The GDK now uses SpatialOS 14.5.0.
- Replicated references to newly created dynamic subobjects will now be resolved correctly.
- Fixed a bug that caused the local API service to memory leak.
- Cloud deployment flow will now correctly report errors when a deployment fails to launch due to a missing assembly.
- Errors are now correctly reported when you try to launch a cloud deployment without an assembly.
- The Start deployment button will no longer become greyed out when a
spatial auth login
process times out.
- This is the last GDK version to support Unreal Engine 4.22. You will need to upgrade your project to use Unreal Engine 4.23 (
4.23-SpatialOSUnrealGDK-preview
) in order to continue receiving GDK releases and support. - When upgrading to Unreal Engine 4.23 you must:
git checkout 4.23-SpatialOSUnrealGDK-preview
git pull
- Download and install the
-v15 clang-8.0.1-based
toolchain from this Unreal Engine Documentation page. - Navigate to the root of GDK repo and run
Setup.bat
. - Run
Setup.bat
, which is located in the root directory of theUnrealEngine
repository. - Run
GenerateProjectFiles.bat
, which is in the same root directory.
For more information, check the Keep your GDK up to date SpatialOS documentation.
- You can now call
SpatialToggleMetricsDisplay
from the console in your Unreal clients in order to view metrics.bEnableMetricsDisplay
must be enabled on clients where you want to use this feature. - The modular-udp networking stack now uses compression by default.
- Reduced network latency by switching off default rpc-packing. If you need this on by default, you can re-enable it by editing
SpatialGDKSettings.ini
- When you start a local deployment, the GDK now checks the port required by the runtime and, if it's in use, prompts you to kill that process.
- You can now measure round-trip ping from a player controller to the server-worker that's currently authoritative over it using the configurable actor component 'SpatialPingComponent'. The latest ping value can be accessed through the component via 'GetPing()' or via the rolling average stored in 'PlayerState'.
- You can disable the warnings that trigger when RPCs are processed with unresolved parameters using the
AllowUnresolvedParameters
function flag. This flag can be enabled through Blueprints or by adding a tag to theUFUNCTION
macro. - Improved logging around entity creation.
- Unreal Engine
4.23.1
is now supported. You can find the4.23.1
version of our engine fork here. - In Example Project, the default session duration has increased from 5 minutes to 120 minutes so you don't have to re-deploy while playtesting.
- In Example Project, the default lobby timer has decreased from 15 seconds to 3 seconds so you don't have to wait for your playtest to start.
- Added in-editor support for exposing a local runtime at a particular IP address. This offers the same functionality as the
--runtime_ip
option in the SpatialOS CLI. - Spatial networking is now always enabled in built assemblies.
- Fixed a bug that could cause name collisions in schema generated for sublevels.
- Downgraded name collisions during schema generation from Warning to Display.
- Replicating a static subobject after it has been deleted on a client no longer results in client attaching a new dynamic subobject.
- Fixed a bug that caused entity pool reservations to cease after a request times out.
- Running
BuildWorker.bat
forSimulatedPlayer
no longer fails if the project path has a space in it. - Fixed a crash when starting PIE with out-of-date schema.
- Fixed an issue where launching a cloud deployment with an invalid assembly name or deployment name wouldn't show a helpful error message.
Features listed in the internal section are not ready to use but, in the spirit of open development, we detail every change we make to the GDK.
- We've added a partial loadbalancing framework. When this is completed in a future release, you will be able to control loadbalancing using server-workers.
- 这是最后支持虚幻引擎 4.22 版本的 GDK 版本。您需要升级您的项目来使用虚幻引擎 4.23 (
4.23-SpatialOSUnrealGDK-preview
)以便继续获取 GDK 发布和支持。 - 要升级到虚幻引擎 4.23 版本,您必须完成以下步骤:
1.git checkout 4.23-SpatialOSUnrealGDK-preview
2.git pull
3. 下载并安装-v15 clang-8.0.1-based
工具链。详情参见 虚幻引擎文档。
4. 打开 GDK 的根目录,运行Setup.bat
。
5. 运行Setup.bat
, 该程序位于UnrealEngine
仓库的根目录。
6. 在同样的根目录中,运行GenerateProjectFiles.bat
。
更多信息,查看 使 GDK 保持更新 文档。
- 您可以在虚幻引擎客户端的控制台调用
SpatialToggleMetricsDisplay
来查看指标。您必须在客户端开启bEnableMetricsDisplay
来使用该功能。 - 默认情况下,模块化udp网络栈现在使用压缩。
- 通过关闭默认 rpc 打包来减少网络延迟。如果需要默认情况下启用它,则可以通过编辑
SpatialGDKSettings.ini
来重新启用它。 - 当您开始本地部署时,GDK 会检查运行时所需的端口。如果该端口正在被使用,则会提示您终止该进程。
- 您可以使用可配置的 Actor 组件
SpatialPingComponent
来测量从玩家控制器到当前对其具有管辖权的服务端 worker 的往返 ping。您可以通过GetPing()
或存储在PlayerState
中的移动平均值来访问组件获取最新的 ping 值。 - 通过
AllowUnresolvedParameters
函数标记,您可以禁用因使用未解析的参数处理 RPC 时触发的警告。您可以使用蓝图或通过向UFUNCTION
宏添加标签来启用此标志。 - 改进关于实体创建的日志输出。
- 现已支持虚幻引擎
4.23.1
。您可以在 此处 找到虚幻引擎分支的4.23.1
版本。 - 在示例项目中,默认的副本持续时间从5分钟增加到120分钟,因此您不必在进行游戏测试时重新部署。
- 在示例项目中,默认的游戏大厅计时器从15秒减少到3秒,因此您不必等待游戏测试开始。
- 添加编辑器内公开特定 IP 地址的本地运行时支持。它提供的功能与 SpatialOS CLI 中的
--runtime_ip
选项相同。 - SpatialOS 网络在构建的程序集中始终开启。
- 修复可能导致为关卡分段生成的模式语言中名称冲突的错误。
- 降低模式语言生成过程中的名称冲突级别:由 Warning (警告) 到 Display (显示)。
- 在客户端上删除静态子对象后对其进行复制不再导致客户端附加新的动态子对象。
- 修复请求超时后实体池预留停止的问题。
- 如果项目路径中有空格,为
SimulatedPlayer
运行BuildWorker.bat
不再失败。 - 修复使用过期模式语言启动 PIE 时发生崩溃的问题。
- 修复使用无效的程序集名称或部署名称启动云部署不会显示有用的错误消息的问题。
内部部分中列出的功能尚未准备就绪,但本着开放式开发的精神,我们详细介绍了对 GDK 所做的所有更改。
- 我们添加了部分负载均衡框架。在未来的版本中完成此框架后,您将可以使用服务端 worker 来控制负载均衡。
- The C Worker SDK now communicates on port 443 instead of 444. This change is intended to protect your cloud deployments from DDoS attacks.
Features listed in the internal section are not ready to use but, in the spirit of open development, we detail every change we make to the GDK.
- The GDK is now compatible with the
CN
launch region. When Improbable's online services are fully working in China, they will work with this version of the GDK. You will be able to create SpatialOS Deployments in China by specifying theCN
region in the Deployment Launcher. Setup.bat
andSetup.sh
both accept the--china
flag, which will be required in order to run SpatialOS CLI commands in theCN
region.- SpatialOS GDK for Unreal > Editor Settings now contains a Region Settings section. You will be required to set Region where services are located to
CN
in order to create SpatialOS Deployments in China.
- MSVC v14.23 removes
typeinfo.h
and replaces it withtypeinfo
. This change causes errors when building the Unreal Engine. This issue only affects Visual Studio 2019 users. You can work around the issue by:
- Open Visual Studio Installer.
- Select "Modify" on your Visual Studio 2019 installation.
- In the Installation details section uncheck all workloads and components until only Visual Studio code editor remains.
- Select the following items in the Workloads tab:
- Universal Windows Platform development
- .NET desktop development
- You must also select the .NET Framework 4.6.2 development tools component in the Installation details section.
- Desktop development with C++
- You must then deselect MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.23), which was added as part of the Desktop development with C++ Workload. You will be notified that: "If you continue, we'll remove the componenet and any items liseted above that depend on it." Select remove to confirm your decision.
- Lastly, add MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.22) from the Individual components tab.
- Select "Modify" to confirm your changes.
- If your project uses replicated subobjects that do not inherit from ActorComponent or GameplayAbility, you now need to enable generating schema for them using
SpatialType
UCLASS specifier, or by checking the Spatial Type checkbox on blueprints. - Chunk based interest is no longer supported. All interest is resolved using query-based interest (QBI). You should remove streaming query and chunk based interest options from worker and launch config files to avoid unnecessary streaming queries being generated.
- If you already have a project that you are upgrading to this version of the GDK, it is encouraged to follow the upgrade process to SpatialOS
14.1.0
:
- Open the
spatialos.json
file in thespatial/
directory of your project. - Replace the
sdk_version
value and the version value of all dependencies with14.1.0
. - Replace all other instances of the version number in the file.
- The GDK now uses SpatialOS
14.1.0
. - Visual Studio 2019 is now supported.
- You can now delete your schema database using options in the GDK toolbar and the commandlet.
- The GDK now checks that schema and a snapshot are present before attempting to start a local deployment. If either are missing then an error message is displayed.
- Added optional net relevancy check in replication prioritization. If enabled, an actor will only be replicated if IsNetRelevantFor is true for one of the connected client's views.
- You can now specify which actors should not persist as entities in your Snapshot. You do this by adding the flag
SPATIALCLASS_NotPersistent
to a class or by enteringNotPersistent
in theClass Defaults
>Spatial Description
field on blueprints. - Deleted startup actors are now tracked.
- Added a user bindable delegate to
SpatialMetrics
which triggers when worker metrics have been received. - Local deployments now create a new log file known as
launch.log
which will contain logs relating to starting and running a deployment. Additionally it will contain worker logs which are forwarded to the SpatialOS runtime. - Added a new setting to SpatialOS Runtime Settings
Worker Log Level
which allows configuration of which verbosity of worker logs gets forwarded to the SpatialOS runtime. - Added a new developer tool called 'Spatial Output Log' which will show local deployment logs from the
launch.log
file. - Added logging for queued RPCs.
- Added several new STAT annotations into the ServerReplicateActors call chain.
- The GDK no longer generates schema for all UObject subclasses. Schema generation for Actor, ActorComponent and GameplayAbility subclasses is enabled by default, other classes can be enabled using
SpatialType
UCLASS specifier, or by checking the Spatial Type checkbox on blueprints. - Added new experimental CookAndGenerateSchemaCommandlet that generates required schema during a regular cook.
- Added the
OverrideSpatialOffloading
command line flag. This allows you to toggle offloading at launch time. - The initial connection from a worker will attempt to use relevant command line arguments (receptionistHost, locatorHost) to inform the connection. If these are not provided the standard connection flow will be followed. Subsequent connections will not use command line arguments.
- The command "Open 0.0.0.0" can be used to connect a worker using its command line arguments, simulating initial connection.
- The command "ConnectToLocator " has been added to allow for explicit connections to deployments.
- Add SpatialDebugger and associated content. This tool can be enabled via the SpatialToggleDebugger console command. Documentation will be added for this soon.
- Fixed a bug where the spatial daemon started even with spatial networking disabled.
- Fixed an issue that could cause multiple Channels to be created for an Actor.
- PlayerControllers on non-auth servers now have BeginPlay called with correct authority.
- Attempting to replicate unsupported types (such as TMap) results in an error rather than crashing the game.
- Generating schema when the schema database is locked by another process will no longer crash the editor.
- When the schema compiler fails, schema generation now displays an error.
- Fixed crash during initialization when running GenerateSchemaCommandlet.
- Generating schema after deleting the schema database now correctly triggers an initial schema generation.
- Streaming levels with query-based interest (QBI) enabled no longer produces errors if the player connection owns unreplicated actors.
- Fixed an issue that prevented player movement in a zoned deployment.
- Fixed an issue that caused queued incoming RPCs with unresolved references to never be processed.
- Muticast RPCs that are sent shortly after an actor is created are now correctly processed by all clients.
- When replicating an actor, the owner's Spatial position will no longer be used if it isn't replicated.
- Fixed a crash upon checking out an actor with a deleted static subobject.
- Fixed an issue where launching a cloud deployment with an invalid assembly name or deployment name wouldn't show a helpful error message.
Features listed in the internal section are not ready to use but, in the spirit of open development, we detail every change we make to the GDK.
- SpatialOS GDK for Unreal > Editor Settings > Region Settings has been moved to SpatialOS GDK for Unreal > Runtime Settings > Region Settings.
- Local deployments can now be launched in China, when the Region where services are located is set to
CN
.
- The Inspector button in the SpatialOS GDK for Unreal toolbar now opens the correct URL.
- The C Worker SDK now communicates on port 443 instead of 444. This change is intended to protect your cloud deployments from DDoS attacks.
Features listed in the internal section are not ready to use but, in the spirit of open development, we detail every change we make to the GDK.
- The GDK is now compatible with the
CN
launch region. When Improbable's online services are fully working in China, they will work with this version of the GDK. You will be able to create SpatialOS Deployments in China by specifying theCN
region in the Deployment Launcher. Setup.bat
andSetup.sh
both accept the--china
flag, which will be required in order to run SpatialOS CLI commands in theCN
region.- SpatialOS GDK for Unreal > Editor Settings now contains a Region Settings section. You will be required to set Region where services are located to
CN
in order to create SpatialOS Deployments in China.
- The GDK no longer relies on an ordering of entity and interest queries that is not guaranteed by the SpatialOS runtime.
- The multiserver offloading tutorial has been simplified and re-factored.
- The Multiserver zoning shooter tutorial has been updated to use the Example Project.
- Simulated player launch configurations are no longer invalid when the GDK is installed as an Engine Plugin.
- RPCs that have been queued for execution for more than 1 second (the default value in
SpatialGDKSettings QueuedIncomingRPCWaitTime
) are now executed even if there are unresolved parameters. This stops unresolved parameters from blocking the execution queue. - Offloading is no longer enabled by default in the Example Project. You can toggle offloading on using these steps.
- Guns no longer intermittently detatch from simulated players in the Example Project.
- Default cloud deployment settings are now correctly set. This means you don't need to manually reset them before doing a cloud deployment.
- You must re-build your Example Project if you're upgrading it to
0.6.0
. - This is the last GDK version to support Unreal Engine 4.20. You will need to upgrade your project to use Unreal Engine 4.22 (
4.22-SpatialOSUnrealGDK-release
) in order to continue receiving GDK releases and support.
- Workers will sometimes not gain authority when quickly reconnecting to an existing deployment, resulting in a failure to spawn or simulate. When using the editor if you Play - Stop - Play in quick succession you can sometimes fail to launch correctly.
- The GDK now uses SpatialOS
13.8.1
. - Dynamic components are now supported. You can now dynamically attach and remove replicated subobjects to Actors.
- Local deployment startup time has been significantly reduced.
- Local deployments now start automatically when you select
Play
. This means you no longer need to selectStart
in the GDK toolbar before you selectPlay
in the Unreal toolbar. - If your schema has changed during a local deployment, the next time you select
Play
the deployment will automatically restart. - Local deployments no longer run in a seperate Command Prompt. Logs from these deployments are now found in the Unreal Editor's Output Log.
- SpatialOS Runtime logs can now be found at
<GameRoot>\spatial\logs\localdeployment\<timestamp>\runtime.log
. - An option to
Show spatial service button
has been added to the SpatialOS Settings menu. This button can be useful when debugging. - Every time you open a GDK project in the Unreal Editor, 'spatial service' will be restarted. This ensures the service is always running in the correct SpatialOS project. You can disable this auto start feature via the new SpatialOS setting
Auto-start local deployment
. - Added external schema code-generation tool for non-Unreal server-worker types. If you create non-Unreal server-worker types using the SpatialOS Worker SDK outside of the GDK and your Unreal Engine, you manually create schema. Use the new helper-script to generate Unreal code from manually-created schema; it enables your Unreal game code to interoperate with non-Unreal server-worker types.
- Added simulated player tools, which will allow you to create logic to simulate the behavior of real players. Simulated players can be used to scale test your game to hundreds of players. Simulated players can be launched locally as part of your development flow for quick iteration, as well as part of a separate "simulated player deployment" to connect a configurable amount of simulated players to your running game deployment.
- Factored out writing of Linux worker start scripts into a library, and added a standalone
WriteLinuxScript.exe
to just write the launch script (for use in custom build pipelines). - Added temporary MaxNetCullDistanceSquared to SpatialGDKSettings to prevent excessive net cull distances impacting runtime performance. Set to 0 to disable.
- Added
OnWorkerFlagsUpdated
, a delegate that can be directly bound to in C++. To bind via blueprints you can use the blueprint callable functionsBindToOnWorkerFlagsUpdated
andUnbindToOnWorkerFlagsUpdated
. You can useOnWorkerFlagsUpdated
to register when worker flag updates are received, which allows you to tweak values at deployment runtime. - RPC frequency and payload size can now be tracked using console commands:
SpatialStartRPCMetrics
to start recording RPCs andSpatialStopRPCMetrics
to stop recording and log the collected information. Using these commands will also start/stop RPC tracking on the server. - Spatial now respects
bAlwaysRelevant
and clients will always checkout Actors that havebAlwaysRelevant
set to true.
- The
improbable
namespace has been renamed toSpatialGDK
. This prevents namespace conflicts with the C++ SDK. - Disconnected players no longer remain on the server until they time out if the client was shut down manually.
- Fixed support for relative paths as the engine association in your games .uproject file.
- RPCs on
NotSpatial
types are no longer queued forever and are now dropped instead. - Fixed issue where an Actor's Spatial position was not updated if it had an owner that was not replicated.
- BeginPlay is now only called with authority on startup actors once per deployment.
- Fixed null pointer dereference crash when trying to initiate a Spatial connection without an existing one.
- URL options are now properly sent through to the server when doing a ClientTravel.
- The correct error message is now printed when the SchemaDatabase is missing.
StartEditor.bat
is now generated correctly when you build a server worker outside of editor.- Fixed an issue with logging errored blueprints after garbage collection which caused an invalid pointer crash.
- Removed the ability to configure snapshot save folder. Snapshots should always be saved to
<ProjectRoot>/spatial/snapshots
. This prevents an issue with absolute paths being checked in which can break snapshot generation. - Introduced a new module,
SpatialGDKServices
, on whichSpatialGDK
andSpatilGDKEditorToolbar
now depend. This resolves a previously cyclic dependency. - RPCs called before entity creation are now queued in case they cannot yet be executed. Previously they were simply dropped. These RPCs are also included in RPC metrics.
- RPCs are now guaranteed to arrive in the same order for a given actor and all of its subobjects on single-server deployments. This matches native Unreal behavior.
0.5.0-preview
- 2019-06-25
- Prevented
Spatial GDK Content
from appearing under Content Browser in the editor, as the GDK plugin does not contain any game content.
- If you are using Unreal Engine 4.22, the AutomationTool and UnrealBuildTool now require .NET 4.6.2.
- Unreal Engine 4.22 is now supported. You can find the 4.22 verson of our engine fork here.
- Setup.bat can now take a project path as an argument. This allows the UnrealGDK to be installed as an Engine Plugin, pass the project path as the first variable if you are running Setup.bat from UnrealEngine/Engine/Plugins.
- Removed the need for setting the
UNREAL_HOME
environment variable. The build and setup scripts will now use your project's engine association to find the Unreal Engine directory. If an association is not set they will search parent directories looking for the 'Engine' folder. - Added the
ASpatialMetricsDisplay
class, which you can use to view UnrealWorker stats as an overlay on the client. - Added the runtime option
bEnableHandover
, which you can use to toggle property handover when running in non-zoned deployments. - Added the runtime option
bEnableMetricsDisplay
, which you can use to auto spawnASpatialMetricsDisplay
, which is used to remote debug server metrics. - Added the runtime option
bBatchSpatialPositionUpdates
, which you can use to batch spatial position updates to the runtime. - Started using the schema_compiler tool to generate schema descriptors rather than relying on 'spatial local launch' to do this.
- Changed Interest so that NetCullDistanceSquared is used to define the distance from a player that the actor type is interesting to the player. This replaces CheckoutRadius which defined the distance that an actor is interested in other types. Requires engine update to remove the CheckoutRadius property which is no longer used.
- Added ActorInterestComponent that can be used to define interest queries that are more complex than a radius around the player position.
- Enabled new Development Authentication Flow
- Added new "worker" entities which are created for each server worker in a deployment so they correctly receive interest in the global state manager.
- Added support for spawning actors with ACLs configured for offloading using actor groups.
- Removed the references to the
Number of servers
slider in the Play in editor drop-down menu. The number of each server worker type to launch in PIE is now specified within the launch configuration in theSpatial GDK Editor Settings
settings tab. - Added
SpatialWorkerId
which is set to the worker ID when the worker associated to theUGameInstance
connects. - Added
USpatialStatics
helper blueprint library exposing functions for checking if SpatialOS networking is enabled, whether offloading is enabled, and more SpatialOS related checks.
- BeginPlay is not called with authority when checking out entities from Spatial.
- Launching SpatialOS would fail if there was a space in the full directory path.
- GenerateSchemaAndSnapshots commandlet no longer runs a full schema generation for each map.
- Reliable RPC checking no longer breaks compatibility between development and shipping builds.
- Fixed an issue with schema name collisions.
- Running Schema (Full Scan) now clears generated schema files first.
- Singleton actor's authority and state now resumes correctly when reconnecting servers to snapshot.
- Retrying reliable RPCs with
UObject
arguments that were destroyed before the RPC was retried no longer causes a crash. - Fixed path naming issues in setup.sh
- Fixed an assert/crash in
SpatialMetricsDisplay
that occurred when reloading a snapshot. - Added Singleton and SingletonManager to query-based interest (QBI) constraints to fix issue preventing Test configuration builds from functioning correctly.
- Failing to
NetSerialize
a struct in spatial no longer causes a crash, it now prints a warning. This matches native Unreal behavior. - Query response delegates now execute even if response status shows failure. This allows handlers to implement custom retry logic such as clients querying for the GSM.
- Fixed a crash where processing unreliable RPCs made assumption that the worker had authority over all entities in the SpatialOS op
- Ordering and reliability for single server RPCs on the same Actor are now guaranteed.
In addition to all of the updates from Improbable, this release includes x improvements submitted by the incredible community of SpatialOS developers on GitHub! Thanks to these contributors:
- @cyberbibby
0.4.2
- 2019-05-20
BeginPlay()
is not called on allWorldSettings
actors #937- Replicated properties within
DEBUG
orWITH_EDITORONLY_DATA
macros are not supported #939 - Client connections will be closed by the
ServerWorker
when using blueprint or C++ breakpoints during play-in-editor sessions #940 - Clients that connect after a Startup Actor (with
bNetLoadOnClient = true
) will not delete the Actor #941 - Generating schema while asset manager is asynchronously loading causes editor to crash #944
- Adjusted dispatcher tickrate to reduce latency
- GenerateSchemaAndSnapshots commandlet no longer runs a full schema generation for each map.
- Launching SpatialOS would fail if there was a space in the full directory path.
- Fixed an issue with schema name collisions.
- Schema generation now respects "Directories to never cook".
- The editor no longer crashes during schema generation when the database is readonly.
- Replicating
UInterfaceProperty
no longer causes crashes.
0.4.1
- 2019-05-01
- Fixed an issue where schema components were sometimes generated with incorrect component IDs.
0.4.0
- 2019-04-30
- The GDK now uses SpatialOS
13.6.2
. - Added this Changelog
- Added an error when unsupported replicated gameplay abilities are found in schema generation.
- Demoted various logs to Verbose in SpatialSender and SpatialReceiver
- You can now use the Project Settings window to pass command line flags to local deployments launched from the GDK toolbar.
- You can now adjust the SpatialOS update frequency and the distance an action must move before we update its SpatialOS position.
- The worker disconnection flow is now handled by
UEngine::OnNetworkFailure
rather than the existingOnDisconnection
callback, which has been removed. - Fix duplicated log messages in
spatial CLI
output when running in PIE. - Fixed deserialization of strings from schema.
- Ensure that components added in blueprints are replicated.
- Fixed potential loading issue when attempting to load the SchemaDatabase asset.
- Add pragma once directive to header file.
- Schema files are now generated correctly for subobjects of the blueprint classes.
- Fixed being unable to launch SpatialOS if project path had spaces in it.
- Editor no longer crashes when setting LogSpatialSender to Verbose.
- Server-workers quickly restarted in the editor will connect to runtime correctly.
- Game no longer crashes when connecting to Spatial with async loading thread suspended.
0.3.0
- 2019-04-04
- Enabling Query Based Interest is needed for level streaming support, but this might affect performance in certain scenarios and is currently being investigated.
- Replicated
TimelineComponents
are not supported.
For current known issues, please visit this docs page
- The default connection protocol is now TCP.
- Query Based Interest is now supported as an opt-in feature.
- Level streaming is now supported. You must enable Query Based Interest checkbox in the Runtime Settings to use level streaming.
- The GDK Toolbar now recognises when a local deployment is running, and contextually displays start and stop buttons. - (@DW-Sebastien)
- Added interface support for Unreal Engine 4.21
UNetConnection
. - (@GeorgeR) - Unreliable RPCs are now implemented using events instead of commands. This resolves associated performance issues.
- The
delete dynamic entities
setting now works when used in conjunction with multiple processes. - You can now determine the type of a SpatialOS worker from within the game instance.
- Entity IDs are now reserved in batches instead of individually. This accelerates the creation of SpatialOS entities.
- You can now serialize and deserialize component data defined in external schema (schema that is not-generated by the Unreal GDK). You can use this to send and receive data, and edit snapshots.
- Improved logging during RPCs.
- The GDK now automatically compiles all dirty blueprints before generating schema.
- Attempting to load a class which is not present in the schema database now causes the game to quit instead of crashing the entire editor.
Actor::ReplicateSubobjects
is now called in the replication flow. This means that Subobjects are now replicated correctly.- Schema generation is no longer fatally halted when blueprints fail to compile.
AActor::TornOff
is now called when aTearOff
event is received. This is in-line with the native implementation.- References to objects within streaming levels, that are resolved before the level has streamed in, no longer cause defective behavior on the client.
- Attempting to replicate a
NonSpatial
actor no longer causes a crash. - The SpatialOS Launcher now launches the correct game client, even when
UnrealCEFSubProcess.exe
is present in the assembly. - Duplicate startup-actors are no longer created when a server-worker reconnects to a deployment.
BeginPlay
is no-longer called authoritatively when a server-worker reconnects to a deployment.- Fast Array Serialization now operates correctly in conjunction with
GameplayAbilitySystem
. - Reference parameters for RPCs are now correctly supported.
- Clients now load the map specified by the global state manager, rather than loading the
GameDefaultMap
before querying the global state manager. - Automatically generated launch configurations for deployments with a prime numbers of server-workers are now generated with the correct number of rows and columns.
- Generating schema for a level blueprint no longer deletes schema that has been generated for other levels.
- Deleting recently created actors no longer causes crashes.
- Having multiple EventGraphs no longer causes incorrect RPCs to be called.
TimerManager
, which is used by SpatialOS networking, is no longer subject to time dilation in theWorld
instance.- Clients no longer crash after being assigned multiple players.
GetWorkerFlag
can now be called from C++ classes.- Pathless mapname arguments are now supported by the GDK commandlet.
- When
NotifyBeginPlay
is called,BeginPlay
is no longer called on actors before theirRole
is correctly set. - Deployments containing multiple server-workers no longer fails to initialize properly when launched through PIE with the
use single process
option unchecked.
In addition to all of the updates from Improbable, this release includes 2 improvements submitted by the incredible community of SpatialOS developers on GitHub! Thanks to these contributors:
- @DW-Sebastien
- @GeorgeR
0.2.0
- 2019-02-26
Startup actors revamp is merged! Snapshots are now simpler. Many bugfixes.
- A warning about an out of date net driver is printed at startup of clients and server.
For current known issues, please visit this docs page
- Actors placed in the level are no longer saved to the snapshot. They are instead spawned dynamically at the start of the game. This should fix quite a few issues such as missing references, and non-replicated instanced data being incorrectly set
- Pass player name and login options in the login URL
- Server will identify clients that have been disconnected from Spatial and trigger the cleanup on their NetConnection
- Exposed SpatialOS connection events in
USpatialNetDriver
- Dynamic Component Ids now start from 10000, Gdk Components will now use 9999 - 0 to avoid future clashes
- Report an error during schema generation if a blueprint RPC has a "by reference" argument
- Launch configs can now be auto-generated to match the selected number of servers to launch from within the PIE editor
- Placeholder entities placed into the generated snapshot are now optional with a UI switch in the SpatialOS Settings
- Implemented updated functionality for UnrealGDKEditorCommandlet: Whenever loading a map for schema/snapshot generation, all sublevels will also be loaded before generation is started
- Will now loop through maps (skipping duplicates) during schema generation, to leverage the "iterative schema generation" feature
- Accepts an additional argument -MapPaths that can specify a collection of specific maps and/or directories (recursive) containing maps, delimited by semicolons. If not provided, defaults to "All maps in project"
- The paths passed in via -MapPaths are flexible
- StartPlayInEditorGameInstance() now correctly call OnStart() on PIE_Client - (@DW-Sebastien)
- Redirect logging in the cloud to output to the correct file
- Changed type of key in
TMap
so Linux build will not give errors - Disabled loopback of component updates
- Fix hanging on shutdown for PIE when disconnected from SpatialOS
- Fixed an issue which caused a character controller to not be destroyed when leaving the view of an observing client
- Fixed crash on multiserver PIE shutdown
- Fixed single-worker shutdown issues when launching SpatialOS through Unreal Engine 4 with Use - - Single Process unchecked in Play Options
- Fixed crash on closing client from cloud deployment
- Fix
DeleteDynamicEntities
not getting used correctly in shutdown - Only call
BeginPlay()
on Actors if the World has begun play - Fixed an issue with schema generation for the default GameMode
- Deleting the schema database reset the starting component ID
- Report invalid name errors during schema generation instead of when launching a deployment.
SchemaDatabase
can now be deleted and component ids will reset.COND_InitialOnly
are only replicated once at the start- Fixed a bug where standalone clients run locally would not connect to spatial
- Missing classes when connecting via a non-editor client
- Schema is now generated for classes that only have RPCs
- Fixed issue where properties won’t be replicated at the start of the game sometimes
- Fixed path bug when specifying snapshot output file in the settings
- Fixed up default connection flows
- Fixed issue will stale shadow data when crossing worker boundaries.
- Removed actors from replication consider list if Unreal server-worker is not authoritative over said actor
- Remove legacy flag "qos_max_unacked_pings_rate" in generated default config - (@DW-Sebastien)
@DW-Sebastien
0.1.0
- 2019-02-08
Support for the new Player Auth APIs has been added and general stability improvements.
Level streaming is currently not supported. For other current known issues, please visit this docs page.
- Support for the new Player Auth APIs
- FUniqueNetId support
- Support for the new network protocol KCP
- Lazy loading of FClassInfo
- Augmented BuildWorker.bat to support additional UBT parameters
- Add IsValid() to FUnrealObjRef
- Fixed critical errors related to Unresolved Objects
- Fixed a bug with Player State appearing to be null
- Fixed a bug related to Create Entity responses coming off the wire after a corresponding actor has been deleted
- Fixed a bug with activating actor components. We now check Initial Data for Actor components and only apply updates if
bReplicates
is true - Fixed a bug when replicating a null list / array
- Fixed a crash with unresolved handover properties
- Changed RakNet to default network protocol temporarily to avoid performance issues with KCP
- Fixed a bug where cloud logging would not work correctly