1.0.0-PREVIEW to 1.0.0ΒΆ
We highly recommend you start this process with no staged changes to your VCS and in an isolated local branch such that you can revert as needed.
- Download/Clone our Tagged Release.
- Extract it to a location in the same drive as your project.
- Copy/Paste the
beam_game_maker_init.sh
into your project's root (next to your.uproject
file). - Open a shell (we recommend
GitBash
if you're usinggit
) in your project root directory. - Run that script passing in the path to our extracted project.
# If you just want to install the BeamableCore plugin (no OnlineSubsystem)
. beam_game_maker_init.sh "/e/Path/To/Unreal/SDK/Root/Folder"
# If you want to install OnlineSubsystemBeamable Plugin too (or had it installed).
. beam_game_maker_init.sh "/e/Path/To/Unreal/SDK/Root/Folder" true
Access Denied
Unreal's integrations with various version control systems will sometimes make files Read-Only at the OS-level. If this is the case, you may see an Access Denied
error when running the above script. Part of that script is deleting the old Plugins/BeamableCore
folder and some of the uasset
/umap
files inside it might be flagged as read-only. To fix this, revert the changes, go to the Plugins/BeamableCore
, and optionally Plugins/OnlineSubsystemBeamable
, search for uasset
/umap
files and make them NOT read-only. On Windows, this can be done by the "Properties" panel of the file.
Please contact our customer support if the above does not work.
If the script is successfull, you should see something like this:
Found .uproject: ./YourProject.uproject
Installing the SDK in your project: YourProject
Tool 'beamable.tools' is up to date (version '3.0.1' manifest file E:\Path\To\Your\.config\dotnet-tools.json) .
Beamable Tools are installed. To call them use "dotnet beam" from any directory under your Unreal project root.
Already installed BeamableCore plugin. Removing it so we can re-install it.
Installed BeamableCore plugin.
# If you're using OnlineSubsystemBeamable, you should see these lines...
Already installed OnlineSubsystemBeamable plugin. Removing it so we can re-install it.
Copying OnlineSubsystemBeamable plugin's Beamable Content folder.
Copying OnlineSubsystemBeamable plugin's Build.cs file.
Copying OnlineSubsystemBeamable plugin's Source/OnlineSubsystemBeamable/Beamable files.
Installed OnlineSubsystemBeamable plugin.
# This means that we successfully upgraded your CLI and SDK version
Installed Beamable SDK successfully.
Now, if you have microservices, do the following steps. If not, skip to the next section.
- Open a shell inside your project root and run:
dotnet tool restore
. - Unlink the Unreal Project by deleting the
.beamable/linked-projects.json
file. - Link it again using
dotnet beam project add-unreal-project .
-
Disable Automatic code Generation by setting
<GenerateClientCode>false</GenerateClientCode>
in every service'scsproj
file. -
Follow the CLI upgrade guide found here to ensure your microservice is now correctly configured.
-
Run your microservice from Rider to verify the upgrade worked.
-
If you want, re-enable Automatic Code Generation by setting
<GenerateClientCode>true</GenerateClientCode>
in every service'scsproj
file. - If you don't want, you can read about manual generation here.
Now, let's go into the Unreal Solution.
-
There were a number of renames and changes, so the project is likely NOT compiling at this point; if most of your work was in Blueprints, those may not be compiling even if the editor is.
-
Target.cs
file andBeam.Configure___
functions- We now add code to your project's
Target.cs
file. This code is callable from anyTarget.cs
andBuild.cs
files. - Before, you had to manually add the various
BeamableCore
modules to these things by hand. Now, you can call the respective functions based on the Type ofTarget
orModule
. - You can refer to the intro guide to see which functions can be called in which
Target
/Modules
.
- We now add code to your project's
Initialization is now manual in all cases.
- Instead of
RegisterOnStarted
/RegisterOnReady
, you should explicitly invoke:InitSDK
orInitSDKWithFrictionlessAuth
.RegisterOnReady
no longer exists. Its semantics were hard to explain and provided little benefits.- It was replaced by
RegisterOnUserReady
. - The semantics for this is: "runs at the end of every user's login process, when all the
UBeamRuntimeSubsystems
have already prefetched data for that user".
- It was replaced by
RegisterOnStarted
remains the same.- A few delegates have been renamed for clarity:
FRuntimeStateChangeHandler
=>FBeamRuntimeHandler
FUserStateChangedCode
=>FUserStateChangedHandlerCode
- We removed
IsFirstAuth
andbDidFirstAuthRun
in favor of a simplerIsLoggedIn(FUserSlot)
function with which you can build.- The new semantics are slightly different and just tell you that there's a user in that slot or not; you are free to handle "Return to main menu" situation as you wish.
- Read more about the initialization flow here.
Microservice Clients suffered a MAJOR change.
- Microservices are now generated into their own exclusive Plugin. This makes the Microservice Client code accessible from any other Plugin or Module in your project.
- This means a few things:
- You must add this plugin to all relevant
Target.cs
andBuild.cs
. - You must add this plugin to your Project's
.uproject
file (can be done via the editor, but since you might not be able to compile --- you can do it manually too). - If you were using OnlineSubsystemBeamable:
- Delete the
AutoGen
folder from inside theCustomer
directory. - Add the
MicroserviceNameMicroserviceClients
plugin as a dependency to the OnlineSubsystemBeamable plugin.
- Delete the
- You must add this plugin to all relevant
- If you haven't already, regenerate the microservice clients via by rebuilding them (or running the
dotnet beam generate-client
command).- This will create a new Plugin in your project called
MicroserviceNameMicroserviceClients
. - This Plugin can be added to any other Plugin or your own project to gain access to the microservice clients and types.
- About code-changes:
- The new clients no longer prefix every generated type with
MicroserviceName
; it only does so for the Request types. - You'll have to go through the code and use the newly generated types.
- This change was made to provide you with more control over naming data-types shared between microservice and Unreal and reduce the common-case verbosity of these names.
- This means you can fix name conflicts as they appear in your project instead of us preemptively doing it.
- The new clients no longer prefix every generated type with
- This will create a new Plugin in your project called