Beamable is happy to announce the release of our Unity SDK 1.2.0.
You can read about all of them in the changelogs, and see the highlights below.
Unity 2021 LTS
Beamable 1.2.0 brings support for the latest Unity Long Term Support (LTS) version. Unity 2021 LTS was released in April. Beamable is committed to supporting the latest three LTS versions. As such, Beamable 1.2.0 is dropping support for Unity 2018 LTS.
Lobby SDK
The Lobby SDK allows players to find, create, and join game lobbies. A player can create a public or private lobby. Other players can join a lobby through a public listing, or use a Join Code to access a specific or private lobby. The Lobby SDK also manages player presence and readiness. Finally, all the players in a lobby can enter the game itself with whatever multiplayer framework you choose. The Beamable Lobby SDK is compatible with Beamable’s own Relay Server, but it can also be used with Photon, Unity’s networking solutions, or a custom multiplayer solution.
Microservice Improvements
Beamable Microservices continue to improve with Beamable 1.2.0. One particularly nice improvement is the ability to use GUID based references in your Microservice dependencies. Previously, the “Use GUID References” checkbox had to be disabled in order for Beamable Microservices to build properly. Now, by using GUIDs, you can rename your assemblies and dependencies without needing to worry about breaking Beamable Microservice references. We’ve also added a few additional methods to the IMicroserviceLeaderboardAPI so that you can get all of the leaderboards associated with a player. Finally, [ClientCallable] methods can now return subclasses of ContentObject directly.
Beamable 1.2.0 also has a breaking change concerning [ClientCallable] method security. Going forward, all HTTP traffic to a [ClientCallable] method must include a valid Authorization header. If it doesn’t, the request will fail with a 401 HTTP error. This breaking change should only affect developers who are using [ClientCallable] methods outside of the Unity game client.For those developers, Beamable 1.2.0 introduces a new attribute, [Callable], which works identically to how [ClientCallable] worked previously. To reiterate, this change only affects you if you’re calling Microservice functions from outside Unity or the LiveOps portal. Otherwise, this change does not affect your game.
Lastly, the EnableDockerBuildKit property in the Project Settings / Beamable / Microservices has been replaced with the DisableDockerBuildKit property. Previously, Beamable did not take advantage of Docker Buildkit, and left it as an opt-in feature. Beamable 1.2.0 reverses this behavior, and makes Docker Buildkit the default. The usage of Docker Buidkit enables developers with ARM based CPU architectures to publish Microservices to the Beamable Cloud.
Stability Improvements
The Beamable 1.2.0 release includes a wide variety of workflow and stability improvements. There is a new way to sort content in the Content Manager window. A dropdown next to the Realm dropdown allows you to sort the content based on id, type, or status. Additionally, the NotificationService nowhas a C# generic method to subscribe to events. This removes the need to add JSON deserialization code in your game logic. One final improvement to highlight is the addition of the Prevent Addressable Code Stripping setting in the Core Beamable configuration. When you build for Android or iOS, this setting will generate a link.xml file that ensures Unity’s Addressable code assets are not stripped from the build. To read about all the other improvements, check out the full changelog below or on our Github.
Added
Unity 2021 LTS support.
PreventAddressableCodeStripping Core Configuration setting that automatically generates a link.xml file that will preserve addressable types.
TryClaim method in EventService to attempt a claim, even if one is not invalid.
GetDeviceId method in AuthService to retrieve the current device id.
deviceIds field on User object that provides all associated device ids.
Content sorting option in Content Manager.
Documentation to IBeamableAPI and all related accessors.
Subscribe<T> method to INotificationService to avoid awkward serialization handling.
Implicit conversion operators from Optional<T> objects wrapping a value type to matching Nullable<T> types.
Inline style editor in BUSS theme manager.
Added LobbyService and PlayerLobby to support new Lobby functionality.
Support for GUID based assembly references.
CallableAttribute for exposing C#MS methods that are meant to be publicly accessible (without authentication required).
ListLeaderboards method to IMicroserviceLeaderboardsApi will return lists of leaderboard ids.
GetPlayerLeaderboards method to IMicroserviceLeaderboardsApi will return leaderboards for a given player.
lbId` field to the LeaderboardView response class.
DisableDockerBuildkit property to the MicroserviceConfiguration. By default, Docker buildkit will now be enabled.
Changed
ManifestSubscription subscription no longer accepts the scope field
AccountHud logs a warning when pressed if there isn’t an AccountManagementFlow in the scene.
Increased the AdminFlow scroll speed
InventoryFlow can now be configured at the GameObject level.
Edit mode for Buss Style Card has been removed in favor of context menus for selector label, variables and properties.
Claiming an event that a player never submitted a score for will report an accurate error message.
Added tooltips to Microservice Manager elements which didn’t have them.
Microservice Manager buttons now highlight on hover.
Microservices will be built specifically for linux/amd64 architecture. For developers with ARM based CPU architectures, enable to the DockerBuildkit setting in the Microservice Configuration to publish microservices.
Building a microservice will always stop the microservice and its source generator if they are running. After the build, the source generator will be reset.
Beamable third party context systems register with a default order of -1000.
Global style sheet is turned now into a list of global style sheets.
Content tags are split on ‘,’ characters in addition to ‘ ‘s.
HeartBeat will now send heartbeat requests faster for our newer live backend services such as Lobbies
Content validation for ID fields will now accept IDs without the prefix
It is now possible to set background sprite as a main texture in SDF Image.
It is now possible to choose 9-slice source and Pixels Per Unit multiplier in SDF image.
Fixed
StoreView prefab now works in landscape mode.
Playmode ContentObject refresh with disabled domain reload on Unity 2019 and 2020.
Reading content in offline mode will no longer throw an exception if there is offline cache available
Android sign-in will always allow user to select an account.
Editor time Content downloads ignore content where no C# class exists.
Account management will no longer log an error after pressing change password button more than once.
Content Manager no longer logs inaccurate warning after renaming content.
Notification handling for multiple BeamContext instances.
Listing ‘sku’ price type was incorrect. Fixed to ‘skus’.
The player’s location is detected automatically
Matchmaking no longer breaks after user switches from Account Management flow.
Client code can handle receiving a ContentObject response from a ClientCallable.
Removed Microstorage related null reference errors on Unity startup.
IMicroserviceNotificationsApi can now send strings with spaces in them for messages.
IMicroserviceLeaderboardsApi will now respect HasValue flag of Optional<T> derived types in all cases.
Fixed issue with Publish flow that caused an invalid Manifest data to exist when publishing any services along a service whose source code was no longer in the project
Fixed issue that made it possible to start a remote service without its dependencies up and running (only happened in cases where the service was only remote — ie: the source code for it was not present in the project)
Removed
Unity 2018 LTS support.
EnableDockerBuildkit property from the MicroserviceConfiguration. By default, Docker buildkit will now be enabled. Disable it again with the new DisableDockerBuildkit field.