From 92f2de6f054aa9b8a3ea450358669fa562b4a9d9 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 14:11:20 -0500 Subject: [PATCH 01/32] Copy editing for clarity, text style cleanup - delete trailing whitespace - mention Email in first-time login - character -> key in explanation about tilde and backtick - replace passive voice with active voice in a couple of places --- docs/unity/getting-started/installing-beamable.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/unity/getting-started/installing-beamable.md b/docs/unity/getting-started/installing-beamable.md index 994927e6..4f23ffce 100644 --- a/docs/unity/getting-started/installing-beamable.md +++ b/docs/unity/getting-started/installing-beamable.md @@ -4,7 +4,7 @@ Welcome to Beamable! This guide will walk you through the steps required to inst !!! info "Compatibility" - • Beamable supports Unity versions 2021.3 to 6000.3 and is compatible with all template types + • Beamable supports Unity versions 2021.3 to 6000.3 and is compatible with all template types • Beamable supports Windows, Mac, iOS, Android, and WebGL platforms ## Setting Up Account in Beamable Portal @@ -33,7 +33,7 @@ Congratulations the Beamable SDK is now installed! ## Log into Beamable -Open the Beamable Login Window by clicking the Beamable button in the Unity toolbar. Now see the Beamable Login Window prompts for user account credentials. Enter the Organization Alias and Password you created when you signed up for Beamable. +Open the Beamable Login Window by clicking the Beamable button in the Unity toolbar. Now see the Beamable Login Window prompts for user account credentials. Enter the Organization Alias, Email, and Password with which you signed up for Beamable. ![Beamable Login Window](./login.png){: style="max-width: 400px;" } @@ -47,7 +47,7 @@ Navigate to the _Beam Library_ by finding it from the Beamable Button in the top In the _Beam Library_, find the _Admin Console_ card and click the _Add Prefab_ button to add the prefab to an empty scene. ![Beamable Admin Console](./library-admin-console.png){: style="max-width: 700px;"} -Enter play-mode, and hit the `~` character (the same character as `` ` ``). This should open up the _Admin Console_. You can type in a bunch of commands like `help`, or `dbid`. +Enter play-mode, and hit the `~` character (the same key as `` ` ``). This should open up the _Admin Console_. You can type in a bunch of commands like `help`, or `dbid`. !!! Note The `dbid` command will print out the current player's id. Learn more in the [frictionless auth section](./../user-reference/beamable-services/identity/frictionless.md). @@ -56,9 +56,9 @@ Enter play-mode, and hit the `~` character (the same character as `` ` ``). This ## Beam CLI Dependency -The Beamable plugin will automatically install the Beam CLI into your Unity project. The Beam CLI is a developer tool for managing Beamable resources like Microservices, Content, and more. The Beamable Unity plugin relies on the CLI for interacting with Beamable. Your Unity project is a valid Beamable CLI project, which means you can also use the CLI directly if required. +The Beamable plugin will automatically install the Beam CLI into your Unity project. The Beam CLI is a developer tool for managing Beamable resources like Microservices, Content, and more. The Beamable Unity plugin relies on the CLI for interacting with Beamable. Your Unity project is a valid Beamable CLI project, which means you can also use the CLI directly if required. -You should expect to see a `.beamable` folder and a `.config`folder in your Unity project's file structure. The `.beamable` folder contains Beamable specific information about your project, and the `.config` folder is a special `dotnet` folder that defines the version of the Beam CLI. If you are using source-control, both of these folders should be included in source-control. +You should expect to see a `.beamable` folder and a `.config`folder in your Unity project's file structure. The `.beamable` folder contains Beamable specific information about your project, and the `.config` folder is a special `dotnet` folder that defines the version of the Beam CLI. If you are using source-control, you should include both of these folders in source-control. The `.config` folder has a file called `dotnet-tools.json` which specifies the version of the Beam CLI being used by the Beamable Unity SDK. By default, the Beamable SDK will maintain this number, and you should not edit it by hand. @@ -85,4 +85,4 @@ As new versions of the Beamable SDK are released, they depend on different Beam !!! danger "User Beware: Changing the CLI version may cause issues" - Starting in SDK 3.0, you _may_ disable the SDK's explicit control of the `dotnet-tools.json` by enabling the `Beamable/Editor/AdvancedCli/Disable Version Requirement` setting in Unity's Project Settings window. If you do this, please understand that the Beamable SDK may stop functioning, as it is trying to use an unplanned version. + Starting in SDK 3.0, you _may_ disable the SDK's explicit control of the `dotnet-tools.json` by enabling the `Beamable/Editor/AdvancedCli/Disable Version Requirement` setting in Unity's Project Settings window. If you do this, please understand that the Beamable SDK may stop functioning, as it would then be trying to use an unplanned version. From ef279f5280a5aa5338355ae9f3269d77da7ced0c Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 14:20:59 -0500 Subject: [PATCH 02/32] Copy edit account-deletion - delete trailing whitespace - remove unnecessary scare-quotes - rephrase parenthetical _exempli gratis_ since we are only talking about microservices there --- docs/unity/samples/account-deletion.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/unity/samples/account-deletion.md b/docs/unity/samples/account-deletion.md index 459ebd1a..231d1b6f 100644 --- a/docs/unity/samples/account-deletion.md +++ b/docs/unity/samples/account-deletion.md @@ -20,7 +20,7 @@ For these reasons, Beamable provides the Forget User API. This document outlines There are a couple different ways to forget user info: -• **Beamable Portal**: "Forget user" is available as an administrative option. This is useful in a scenario where a player "requests" deletion of their account info, and is followed up by a customer support member. +• **Beamable Portal**: "Forget user" is available as an administrative option. This is useful in a scenario where a player requests deletion of their account info, and is followed up by a customer support member. • **Self-Service**: The [`object/accounts/{objectId}/admin/forget`](https://docs.beamable.com/reference/delete_object-accounts-objectid-admin-forget) API can be called from a microservice to allow users to initiate their own account info deletion. @@ -38,10 +38,10 @@ Based on guidelines for user account deletion, this method should be paired with ## Option 2. Forget User via Code -**The script can be downloaded as a GitHub Gist here:** [DeletePlayerInfoService.cs](https://gist.github.com/beamable-gists/4ee1ecc72475eca5e6f63aecfdba762a) +**The script can be downloaded as a GitHub Gist here:** [DeletePlayerInfoService.cs](https://gist.github.com/beamable-gists/4ee1ecc72475eca5e6f63aecfdba762a) _The full script can also be found at the bottom of this document._ -The API is only callable by an admin (e.g., a microservice). Therefore, you will need to follow the steps to create a microservice before this script can be called. See the [Microservice Framework](../user-reference/cloud-services/microservices/microservice-framework.md) for more info. +The API is only callable from a privileged context such as a microservice. Therefore, you will need to follow the steps to create a microservice before this script can be called. See the [Microservice Framework](../user-reference/cloud-services/microservices/microservice-framework.md) for more info. The API used here is [`object/accounts/{objectId}/admin/forget`](https://docs.beamable.com/reference/delete_object-accounts-objectid-admin-forget). The `objectId` is the player's account ID, **not** their realm ID. Typically, a user's realm ID is equal to the account ID+1 since both these values are created in rapid succession. From 7bcd4b194cada6abfa86e27eebbd836ac2dd3ac3 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 14:30:41 -0500 Subject: [PATCH 03/32] Make aliases and avatars agree with plural accounts' possessive. --- docs/unity/samples/lightbeam-account.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/unity/samples/lightbeam-account.md b/docs/unity/samples/lightbeam-account.md index 5ff664fa..1ff1bcd1 100644 --- a/docs/unity/samples/lightbeam-account.md +++ b/docs/unity/samples/lightbeam-account.md @@ -2,7 +2,7 @@ The Account Management Lightbeam can be opened through the Beam Library window. -There are no prerequisites to use this Lightbeam. This sample will allow you create multiple accounts, optionally attach email & password credentials, and configure the accounts' alias and avatar. +There are no prerequisites to use this Lightbeam. This sample will allow you create multiple accounts, optionally attach email & password credentials, and configure the accounts' aliases and avatars. !!! tip "Read the SDK Docs" Find more information about the Accounts SDK by reading the [Username / Password](../user-reference/beamable-services/identity/username-password.md) Section @@ -14,4 +14,4 @@ There are no prerequisites to use this Lightbeam. This sample will allow you cre --> - \ No newline at end of file + From 5f16cb768e3c9892b96241d5705f6dc8fd843bc4 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 14:45:12 -0500 Subject: [PATCH 04/32] Capitalize JSON and its -> it is --- .../beamable-services/bi/ab-testing-overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/bi/ab-testing-overview.md b/docs/unity/user-reference/beamable-services/bi/ab-testing-overview.md index 42e0112b..2dc07608 100644 --- a/docs/unity/user-reference/beamable-services/bi/ab-testing-overview.md +++ b/docs/unity/user-reference/beamable-services/bi/ab-testing-overview.md @@ -11,7 +11,7 @@ The concept of A/B Testing is to run experiments across a cohort, segmented set, - **Increase KPIs** - Key performance indicators, including retention, can be isolated and improved through testing - **Increase Revenue** - By improving KPIs, improve revenue - **Decrease Costs** - Game makers can focus on a leaner feature-set which is proven to matter to players -- **Decrease Risks** - Roll out new gameplay features more frequently to a subset of the players. Ensure its ready before releasing to everyone +- **Decrease Risks** - Roll out new gameplay features more frequently to a subset of the players. Ensure it is ready before releasing to everyone Generally you will want to follow a process: @@ -182,7 +182,7 @@ GetCloudDataManifestResponse playerManifestResponse = **Loading Data** -Loop through the `meta`. There will be 0 or more values. The implementation here depends on the needs of the project. In this example, each loop iteration is parsed as Json and tested for compatibility with the `MyPlayerProgression` data type. +Loop through the `meta`. There will be 0 or more values. The implementation here depends on the needs of the project. In this example, each loop iteration is parsed as JSON and tested for compatibility with the `MyPlayerProgression` data type. ```csharp foreach (CloudMetaData cloudMetaData in playerManifestResponse.meta) From 679b266c5bb1e69540354d9e8174506b98637546 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 14:50:55 -0500 Subject: [PATCH 05/32] Backticks around identifiers that might include underscores --- .../bi/analytics-overview.md | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/bi/analytics-overview.md b/docs/unity/user-reference/beamable-services/bi/analytics-overview.md index d4db2eec..a87a2caf 100644 --- a/docs/unity/user-reference/beamable-services/bi/analytics-overview.md +++ b/docs/unity/user-reference/beamable-services/bi/analytics-overview.md @@ -35,25 +35,25 @@ These KPI's, defined below, are meant to help you in the following ways: | KPI | Detail | |-----|--------| -| platform_session_install | detect when a player is first created | -| platform_session_daily | detect daily activity of the player, good for measuring retention | -| platform_session_session | provides you with session data | -| platform_session_session_end | provides you with end of session data | -| platform_ua_attribution | provides you with user acquisition data related to campaigns | -| platform_cohort_join | data to identify when a player joins a cohort (segment) | -| platform_commerce_external_revenue | data to identify when a player makes real money purchases from an external source | -| platform_commerce_hard_purchase | data to identify when a player makes real money purchases (Hard Currency) | -| platform_commerce_virtual_purchase | data to identify when a player spends virtual currency | -| platform_commerce_failed_purchase | data to identify when purchases have failed | -| platform_entitlement_entitlement | Player has been granted an entitlement | -| platform_stats_stats | player stat has been modified | -| platform_group_group_create | group has been created | -| platform_group_group_invite | player has been invited to a group | -| platform_group_group_join | player has joined a group | -| platform_group_group_leave | player has left a group | -| platform_group_group_application | player has applied to join a group | -| platform_administration_change_email | player has changed their email | -| platform_administration_reset_password | player has reset their password | +| `platform_session_install` | detect when a player is first created | +| `platform_session_daily` | detect daily activity of the player, good for measuring retention | +| `platform_session_session` | provides you with session data | +| `platform_session_session_end` | provides you with end of session data | +| `platform_ua_attribution` | provides you with user acquisition data related to campaigns | +| `platform_cohort_join` | data to identify when a player joins a cohort (segment) | +| `platform_commerce_external_revenue` | data to identify when a player makes real money purchases from an external source | +| `platform_commerce_hard_purchase` | data to identify when a player makes real money purchases (Hard Currency) | +| `platform_commerce_virtual_purchase` | data to identify when a player spends virtual currency | +| `platform_commerce_failed_purchase` | data to identify when purchases have failed | +| `platform_entitlement_entitlement` | Player has been granted an entitlement | +| `platform_stats_stats` | player stat has been modified | +| `platform_group_group_create` | group has been created | +| `platform_group_group_invite` | player has been invited to a group | +| `platform_group_group_join` | player has joined a group | +| `platform_group_group_leave` | player has left a group | +| `platform_group_group_application` | player has applied to join a group | +| `platform_administration_change_email` | player has changed their email | +| `platform_administration_reset_password` | player has reset their password | ## Game Maker User Experience @@ -291,43 +291,43 @@ SELECT * FROM information_schema.columns WHERE table_schema = '[your de_ID goes The above query will yield the following results. And as you can see the information provided in this table is immensely valuable. Beamable by default calculates a bunch of information for you making it easy to extract MAU, DAU, Session Length, Spending habits and more. -| Column Name | Data Type | Detail | -| :--------------------------- | :----------- | :------------------------------------------------------------------------------------ | -| event_id | bigint | Id of the event | -| act_date | varchar(256) | Date of the event as a string | -| act_time | timestamp | timestamp of the event | -| gamer_tag | bigint | PlayerId of the player | -| e.spend3d | varchar(256) | How much the player has spent in the last 3 days | -| e.sessions14d | varchar(256) | how many sessions the player has had in the last 14 days | -| e.corrid | varchar(256) | a correlation id which can be used across tables | -| e.sessiondays | varchar(256) | has played a session at least once for a total of N days. These are not consecutive. | -| e.spendtotal | varchar(256) | total amount spent | -| e.sessions28d | varchar(256) | how many session the player has had in the last 28 days | -| e.device.platform | varchar(256) | what platform they were using when this event was written | -| e.sessionstotal | varchar(256) | total number of sessions | -| e.purchasestotal | varchar(256) | total purchases | -| e.spend7d | varchar(256) | total amount spent in the last 7 days | -| e.timebetweensessionsminutes | varchar(256) | average time between sessions in minutes | -| e.firstdailysession | varchar(256) | was this event the first daily session? | -| e.sessions3d | varchar(256) | how many sessions in the last 3 days | -| e.purchases7d | varchar(256) | how many purchases in the last 7 days | -| e.dayssinceinstall | varchar(256) | how many days since the player installed | -| e.sessions7d | varchar(256) | how many session in the last 7 days | -| e.spend28d | varchar(256) | how much have they spent in the last 28 days | -| e.ip | varchar(256) | the ip address of the player for this session event | -| e.purchases14d | varchar(256) | total purchases in the last 14 days | -| e.purchases28d | varchar(256) | total purchases in the last 28 days | -| e.purchases3d | varchar(256) | total purchases in the last 3 days | -| e.spend14 | varchar(256) | total spend in the last 14 days | +| Column Name | Data Type | Detail | +| :----------------------------- | :----------- | :------------------------------------------------------------------------------------ | +| `event_id` | bigint | Id of the event | +| `act_date` | varchar(256) | Date of the event as a string | +| `act_time` | timestamp | timestamp of the event | +| `gamer_tag` | bigint | PlayerId of the player | +| `e.spend3d` | varchar(256) | How much the player has spent in the last 3 days | +| `e.sessions14d` | varchar(256) | how many sessions the player has had in the last 14 days | +| `e.corrid` | varchar(256) | a correlation id which can be used across tables | +| `e.sessiondays` | varchar(256) | has played a session at least once for a total of N days. These are not consecutive. | +| `e.spendtotal` | varchar(256) | total amount spent | +| `e.sessions28d` | varchar(256) | how many session the player has had in the last 28 days | +| `e.device.platform` | varchar(256) | what platform they were using when this event was written | +| `e.sessionstotal` | varchar(256) | total number of sessions | +| `e.purchasestotal` | varchar(256) | total purchases | +| `e.spend7d` | varchar(256) | total amount spent in the last 7 days | +| `e.timebetweensessionsminutes` | varchar(256) | average time between sessions in minutes | +| `e.firstdailysession` | varchar(256) | was this event the first daily session? | +| `e.sessions3d` | varchar(256) | how many sessions in the last 3 days | +| `e.purchases7d` | varchar(256) | how many purchases in the last 7 days | +| `e.dayssinceinstall` | varchar(256) | how many days since the player installed | +| `e.sessions7d` | varchar(256) | how many session in the last 7 days | +| `e.spend28d` | varchar(256) | how much have they spent in the last 28 days | +| `e.ip` | varchar(256) | the ip address of the player for this session event | +| `e.purchases14d` | varchar(256) | total purchases in the last 14 days | +| `e.purchases28d` | varchar(256) | total purchases in the last 28 days | +| `e.purchases3d` | varchar(256) | total purchases in the last 3 days | +| `e.spend14` | varchar(256) | total spend in the last 14 days | ### What Tables are available? As you use Beamable, more and more data will be available. That means more tables will also be available. By default there are a select few tables available. -- platform -- platform_session_session -- platform_session_session_end -- platform_session_install +- `platform` +- `platform_session_session` +- `platform_session_session_end` +- `platform_session_install` But as you use Beamable features and as you write custom Telemetry events more data and tables will automatically be available. So it's important that you query to see what tables are available from time to time. The following query will provide you with a list of tables that are available to you at any given point in time. From 6dcac77f0f0654fb16278fd30402cc8795cf77a4 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 14:54:06 -0500 Subject: [PATCH 06/32] Spelling trail -> trial - did not change the PNG filename since that may break links --- .../beamable-services/bi/segmentation-overview.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/bi/segmentation-overview.md b/docs/unity/user-reference/beamable-services/bi/segmentation-overview.md index 7bcea6e0..1d620ee1 100644 --- a/docs/unity/user-reference/beamable-services/bi/segmentation-overview.md +++ b/docs/unity/user-reference/beamable-services/bi/segmentation-overview.md @@ -27,11 +27,11 @@ Most of the segmentation in Beamable is to create a cohort by a _stat_. You can ![Create Cohort via Stat](../../../../media/imgs/create_cohort_via_stat.png) -In this trail, we also added these values to complete and save the trial. +In this trial, we also added these values to complete and save the trial. -![Trail Save](../../../../media/imgs/trail_save.png) +![Trial Save](../../../../media/imgs/trail_save.png) -What this is doing is creating a trail that can be joined by a cohort. As you will learn in the A/B Testing area, that trials can be used in various places to run experiments. The above will create a cohort called "7thDayReturningPlayers" and all actions can be performed on this cohort from various other parts of Beamable. +What this is doing is creating a trial that can be joined by a cohort. As you will learn in the A/B Testing area, that trials can be used in various places to run experiments. The above will create a cohort called "7thDayReturningPlayers" and all actions can be performed on this cohort from various other parts of Beamable. ### Upload CSV to Create a Cohort From 13d6dbb70e5f821673e2cafd7d1f324699010275 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 14:59:05 -0500 Subject: [PATCH 07/32] Delete trailing whitespace and downcase accidental capitalization --- .../beamable-services/game-economy/inventory-overview.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/game-economy/inventory-overview.md b/docs/unity/user-reference/beamable-services/game-economy/inventory-overview.md index b95db88f..e13ec672 100644 --- a/docs/unity/user-reference/beamable-services/game-economy/inventory-overview.md +++ b/docs/unity/user-reference/beamable-services/game-economy/inventory-overview.md @@ -68,7 +68,7 @@ You can see bellow the flows when getting and granting the Inventory Items with ### `IFederatedInventory` interface -TO use the Federated Inventory you should start by implementing the `IFederatedInventory` interface in your microservice. Be aware that this interface also implements `IFederatedLogin` because federated authentication is a prerequisite, as mentioned earlier. `T` must be your implementation of the `IThirdPartyCloudIdentity` - a very simple interface that requires you to define a unique name/namespace for your federation. This enables you to have multiple federation implementations in a single microservice. +To use the Federated Inventory you should start by implementing the `IFederatedInventory` interface in your microservice. Be aware that this interface also implements `IFederatedLogin` because federated authentication is a prerequisite, as mentioned earlier. `T` must be your implementation of the `IThirdPartyCloudIdentity` - a very simple interface that requires you to define a unique name/namespace for your federation. This enables you to have multiple federation implementations in a single microservice. ```csharp public class MyFederationIdentity : IThirdPartyCloudIdentity @@ -98,7 +98,7 @@ public class MyFederationService : Microservice, IFederatedInventory GetInventoryState(string id) } ``` -The important thing to emphasize here is the `id` argument. It's the same external account id that you return from the `Authenticate` method. If you want to access the player's id in the Beamable system, you can use `this.Context.UserId` +The important thing to emphasize here is the `id` argument. It's the same external account id that you return from the `Authenticate` method. If you want to access the player's id in the Beamable system, you can use `this.Context.UserId` As an example, you can use the wallet address as an external user identifier when implementing blockchain federation. ### `StartInventoryTransaction` implementation @@ -199,4 +199,4 @@ You can also check those other samples: - [Genamon - a game that uses Generative AI and blockchain with federated authentication and inventory](https://github.com/beamable/genamon-polygon) - [Polygon/Ethereum authentication and inventory federation](https://github.com/beamable/polygon-example) -- [Solana/Phantom authentication and inventory federation](https://github.com/beamable/solana-example) \ No newline at end of file +- [Solana/Phantom authentication and inventory federation](https://github.com/beamable/solana-example) From 4acb6c7a84a41795a2d6bb7716d273f8dc7d25ac Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 15:16:23 -0500 Subject: [PATCH 08/32] Grammar: false -> falsely --- .../beamable-services/game-economy/stores-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/unity/user-reference/beamable-services/game-economy/stores-overview.md b/docs/unity/user-reference/beamable-services/game-economy/stores-overview.md index 1225b814..345bad03 100644 --- a/docs/unity/user-reference/beamable-services/game-economy/stores-overview.md +++ b/docs/unity/user-reference/beamable-services/game-economy/stores-overview.md @@ -435,7 +435,7 @@ Here we are setting the namespace to **payments** and then the key is **client_a !!! danger "Security Warning" - This feature is not secure unless you track this from within a MicroService and validate the purchase. It is highly advisable to do so in order to not allow a customer to spoof or false track a purchase. + This feature is not secure unless you track this from within a MicroService and validate the purchase. It is highly advisable to do so in order to not allow a customer to spoof or falsely track a purchase. Once your configuration has been setup to allow this API to function, then you can use the `.Api.PaymentService.Track` API to track the purchase. The various fields of the tracking request may be arbitrary strings of your choice, but for the sake of consistency you may want to match the patterns used by the Beamable Commerce Service. From 58f185789c3509d70382bc47fba5c5d72bd306ea Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 15:19:41 -0500 Subject: [PATCH 09/32] Spelling and grammar --- .../game-economy/virtual-currency-overview.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/game-economy/virtual-currency-overview.md b/docs/unity/user-reference/beamable-services/game-economy/virtual-currency-overview.md index b7a7adc0..6f1836b5 100644 --- a/docs/unity/user-reference/beamable-services/game-economy/virtual-currency-overview.md +++ b/docs/unity/user-reference/beamable-services/game-economy/virtual-currency-overview.md @@ -12,9 +12,9 @@ Currencies can be configured from the [Content Manager Editor](../profile-storag The currencies for a given player can be managed in several ways, depending on your use case. -**Client-Authoritative (Unity code):** If your game does not include networked multiplayer and can tolerate cheating, allowing the client to read/write their own currencies is the simplest option. Examples of this can be seen in the bellow. Note that your currency must have "Write Self" enabled. +**Client-Authoritative (Unity code):** If your game does not include networked multiplayer and can tolerate cheating, allowing the client to read/write their own currencies is the simplest option. Examples of this can be seen below. Note that your currency must have "Write Self" enabled. -**Server-Authoritative (Microservice):** A much more secure way to handle currency modifications is via a Microservice. In this scenario, the client is not able to modify their currencies directly, it is handled on the server. You can check the [Microservices](../../cloud-services/microservices/microservice-framework.md) section for more information. +**Server-Authoritative (Microservice):** A much more secure way to handle currency modifications is via a Microservice. In this scenario, the client is not able to modify their currencies directly, because it is handled on the server. You can check the [Microservices](../../cloud-services/microservices/microservice-framework.md) section for more information. **Portal (Development):** Player currencies can also be modified through the Portal; Note that this should only be used during development or to make corrections to a player account. @@ -24,7 +24,7 @@ The Beamable API provides helper functions to subscribe to changes in the curren The main API components are [`InventoryUpdateBuilder`](https://csharp.cdocs.beamable.com/latest/classBeamable_1_1Common_1_1Api_1_1Inventory_1_1InventoryUpdateBuilder.html#details) which builds a list of one or more currency operations to execute, and [`InventoryService`](https://csharp.cdocs.beamable.com/latest/classBeamable_1_1Api_1_1Inventory_1_1InventoryService.html#details) which executes the currency operations. -_Note: This Beamable system handles player inventory **and also** player currency._ +_Note: This Beamable system handles player inventory of items **and also** currency._ ### Adding Currency @@ -273,4 +273,4 @@ namespace Beamable.Examples.Services.InventoryService.InventoryCurrencyExample } } } -``` \ No newline at end of file +``` From 12b82c9569324a99ab4828b6b3ec5fe4ce92cf71 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 15:21:42 -0500 Subject: [PATCH 10/32] Clean up trailing whitespace --- .../beamable-services/identity/federated-identity.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/unity/user-reference/beamable-services/identity/federated-identity.md b/docs/unity/user-reference/beamable-services/identity/federated-identity.md index d9b3eb31..a90dc355 100644 --- a/docs/unity/user-reference/beamable-services/identity/federated-identity.md +++ b/docs/unity/user-reference/beamable-services/identity/federated-identity.md @@ -15,7 +15,7 @@ You should first create a microservice or use an existing one. You can bundle mu ### Implementing an IFederationId interface -Create an implementation of IThirdPartyCloudIdentity in Beamable/Common (or any shared assembly). +Create an implementation of IThirdPartyCloudIdentity in Beamable/Common (or any shared assembly). This will create a "tuna" namespace for your new authentication scheme. Namespace will be a part of the authentication endpoint path. In the following example, TunaCloudIdentity will correspond to `/your_microservice/tuna/authenticate` and HaddockCloudIdentity will correspond to `/your_microservice/haddock/authenticate`. ```csharp From d84238237130647c20a19ecc7b0bebdedfcc3a9b Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 15:23:06 -0500 Subject: [PATCH 11/32] Remove unnecessary scare quotes --- .../user-reference/beamable-services/identity/frictionless.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/unity/user-reference/beamable-services/identity/frictionless.md b/docs/unity/user-reference/beamable-services/identity/frictionless.md index 240788af..11f37708 100644 --- a/docs/unity/user-reference/beamable-services/identity/frictionless.md +++ b/docs/unity/user-reference/beamable-services/identity/frictionless.md @@ -1,6 +1,6 @@ # Frictionless Authentication -Beamable’s SDK provides frictionless authentication by default when the SDK is initialized. This is completely done for you under the hood. It is quite simple, and thus the Code Sample for it is short. However, this is an opportunity for you to learn more about the Beamable SDK and what it does for you when it is initialized from any “prefab”, service or API. +Beamable’s SDK provides frictionless authentication by default when the SDK is initialized. This is completely done for you under the hood. It is quite simple, and thus the Code Sample for it is short. However, this is an opportunity for you to learn more about the Beamable SDK and what it does for you when it is initialized from any prefab, service or API. ![Frictionless Flow](../../../../media/imgs/frictionless_auth_lifecycle.png){: style="height:auto;width:600px"} From 3b5043b182064a42c093e1e7b931ae144c69d892 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 15:24:31 -0500 Subject: [PATCH 12/32] Correct the JSON syntax for customerScoped note. --- .../user-reference/beamable-services/identity/html-sign-in.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/unity/user-reference/beamable-services/identity/html-sign-in.md b/docs/unity/user-reference/beamable-services/identity/html-sign-in.md index e70578b4..4e895fbf 100644 --- a/docs/unity/user-reference/beamable-services/identity/html-sign-in.md +++ b/docs/unity/user-reference/beamable-services/identity/html-sign-in.md @@ -133,4 +133,4 @@ function login(evt) { !!! warning "CID-scoped logins" When the scope field is in `{{cid}}.{{pid}}` form, that is a realm-scoped login, the standard login for players. For some purposes, such as administrative tools, you may want a CID-scoped login, which will yield a token that is pertinent to your organization as a whole, rather than a specific realm. - In the case of CID-scoped logins, you must include 'customerScoped=true' in the body. + In the case of CID-scoped logins, you must include `"customerScoped":true` in the body. From 04bbc85422939e1b5914e396f24b36dfdd3a6481 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 15:28:24 -0500 Subject: [PATCH 13/32] Spelling and grammar --- .../identity/providers/facebook-sign-in.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/identity/providers/facebook-sign-in.md b/docs/unity/user-reference/beamable-services/identity/providers/facebook-sign-in.md index c7ae4c25..98e482d5 100644 --- a/docs/unity/user-reference/beamable-services/identity/providers/facebook-sign-in.md +++ b/docs/unity/user-reference/beamable-services/identity/providers/facebook-sign-in.md @@ -11,10 +11,10 @@ Below is a typical Facebook usage pattern. You initiate from your UI that you wa ### Configure Facebook App -In orther to setup the Unity Project you need to configure the Facebook Dashboard: +In order to setup the Unity Project you need to configure the Facebook Dashboard: - The app must be connected to a business and the business should be verified. -- Since we are using email you need to add it's permissions: Dashboard / Use Cases / Customize the `Authenticate and request data from users with Faebook Login / Permissions and Features => add email +- Since we are using email you need to add its permissions: Dashboard / Use Cases / Customize the `Authenticate and request data from users with Facebook Login / Permissions and Features => add email ![facebook-app.png](../../../../../media/imgs/facebook-app.png) @@ -55,7 +55,7 @@ private void FB_AuthCallback (ILoginResult result) ## Beamable Login with AccessToken !!! info "Beamable SDK Initialization" - The following assumes that you have initialized the Beamable SDK and it is stored in _beamContext variable. + The following assumes that you have initialized the Beamable SDK and it is stored in a variable named `_beamContext`. ```csharp _beamContext = BeamContext.Default; await _beamContext.OnReady; @@ -166,4 +166,4 @@ If you have implemented a default Facebook authentication flow using Beamable, y ### Questions? -If you have questions about these answers or filling our the Data Protection Survey, please email [support@beamable.com](mailto:support@beamable.com). \ No newline at end of file +If you have questions about these answers or filling our the Data Protection Survey, please email [support@beamable.com](mailto:support@beamable.com). From 0130e087aadf56f5480581f41134e311ef49cc76 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 15:45:00 -0500 Subject: [PATCH 14/32] Grammar: articles: a and the --- .../identity/providers/google-play-game-services-sign-in.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/identity/providers/google-play-game-services-sign-in.md b/docs/unity/user-reference/beamable-services/identity/providers/google-play-game-services-sign-in.md index 2c31c9a1..2648f5cc 100644 --- a/docs/unity/user-reference/beamable-services/identity/providers/google-play-game-services-sign-in.md +++ b/docs/unity/user-reference/beamable-services/identity/providers/google-play-game-services-sign-in.md @@ -39,12 +39,12 @@ In orther to setup the Unity Project you need to Set the GPS Secret to Beamable ### Additional iOS Setup -Make sure that your game flow takes into account fact that the iOS is not supported platform by Google Play Game Services. +Make sure that your game flow takes into account the fact that iOS is not a supported platform by Google Play Game Services. ## Google Play Game Services Integration -The Beamable SDK contains a wrapper for GPGS behavior on Android (iOS is not supported). The provided class is called SignInWithGPG, which can be initialized after following steps from [Google documentation](https://developers.google.com/games/services/console/enabling). It does contain two Actions that developer can subscribe to: `OnLoginResult` and `OnRequestServerSideAccessResult`. In order to perform login as third party to Beamable both of them must return successfully—first returns info about local login, second one about getting server side access token that is required for Beamable backend. +The Beamable SDK contains a wrapper for GPGS behavior on Android (iOS is not supported). The provided class is called SignInWithGPG, which can be initialized after following steps from [Google documentation](https://developers.google.com/games/services/console/enabling). It does contain two Actions that developer can subscribe to: `OnLoginResult` and `OnRequestServerSideAccessResult`. In order to perform login as third party to Beamable both of them must return successfully. The first returns info about local login, and the second about getting the server side access token that is required for the Beamable backend. ```csharp SignInWithGPG _gpg; From 578d7dc18bf5128a77f19935364922eaec7d534e Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 15:48:17 -0500 Subject: [PATCH 15/32] Clean up trailing whitespace --- .../beamable-services/identity/providers/steam-sign-in.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/identity/providers/steam-sign-in.md b/docs/unity/user-reference/beamable-services/identity/providers/steam-sign-in.md index 058d4f9a..f8b1ad09 100644 --- a/docs/unity/user-reference/beamable-services/identity/providers/steam-sign-in.md +++ b/docs/unity/user-reference/beamable-services/identity/providers/steam-sign-in.md @@ -155,8 +155,8 @@ In the following sections, you will see that we use the above code to convert th Now that we have the Steam Session Token, we need to account for 3 different scenarios: -New Player -Returning Player already linked to Steam +New Player +Returning Player already linked to Steam Returning Player linking their account with Steam We can tell which of these scenarios to follow by checking two pieces of information: whether the Steam ID is already attached to a Beamable account and whether the current, local account has a Steam 3rd party association. From 190c30ad470e6519e9547d44b2fc34ed773922bb Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 15:51:40 -0500 Subject: [PATCH 16/32] Removing incorrect _exempli gratis_ that should have been an _id est_ --- .../beamable-services/live-ops/events-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/unity/user-reference/beamable-services/live-ops/events-overview.md b/docs/unity/user-reference/beamable-services/live-ops/events-overview.md index 981591be..d7b7c857 100644 --- a/docs/unity/user-reference/beamable-services/live-ops/events-overview.md +++ b/docs/unity/user-reference/beamable-services/live-ops/events-overview.md @@ -338,7 +338,7 @@ Refer to the table below for an example of a limited store, where event-driven o Typically, the event rewards (for the **standard** events described above) are based on the player's individual progress (score, rank, etc.) in the game and the reward is given to that individual. -However, with **group** events, rewards are based on group progress (e.g., combined score of every group member). When a group event is rewarded, all **eligible** members of the group receive the reward — regardless of individual contribution to the event. +However, with **group** events, rewards are based on group progress (that is, combined score of every group member). When a group event is rewarded, all **eligible** members of the group receive the reward — regardless of individual contribution to the event. !!! warning "Important Notes" From da6ac2c276ff40b56f99ca9d711ff5535d9ef033 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 15:53:54 -0500 Subject: [PATCH 17/32] Delete unusual trailing underscore --- .../user-reference/beamable-services/live-ops/mail-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/unity/user-reference/beamable-services/live-ops/mail-overview.md b/docs/unity/user-reference/beamable-services/live-ops/mail-overview.md index ec346fe9..aada9074 100644 --- a/docs/unity/user-reference/beamable-services/live-ops/mail-overview.md +++ b/docs/unity/user-reference/beamable-services/live-ops/mail-overview.md @@ -2,7 +2,7 @@ The Beamable **Mail** feature allows game makers to create and manage in-game mail messaging systems for players. -The purpose of this feature is to allow players to manage in-game mail messages. Let's say your users have an inbox in their player profile, and they can receive messages whenever something significant happens. This is a good fit for Mail._ +The purpose of this feature is to allow players to manage in-game mail messages. Let's say your users have an inbox in their player profile, and they can receive messages whenever something significant happens. This is a good fit for Mail. Mail provides a robust messaging system that enables players to send and receive persistent messages with attachments and rewards, creating engagement through communication and item distribution. From 303f56edb5408e446a2c95438295e6d913e8d74f Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Thu, 29 Jan 2026 16:03:57 -0500 Subject: [PATCH 18/32] Attempting to clarify the days relative explanation --- .../beamable-services/live-ops/player-stats-and-activities.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/unity/user-reference/beamable-services/live-ops/player-stats-and-activities.md b/docs/unity/user-reference/beamable-services/live-ops/player-stats-and-activities.md index 55079536..94315483 100644 --- a/docs/unity/user-reference/beamable-services/live-ops/player-stats-and-activities.md +++ b/docs/unity/user-reference/beamable-services/live-ops/player-stats-and-activities.md @@ -46,6 +46,6 @@ These are used to create campaigns using time as parameters. For example, you ca - Last session date - Last purchase date -And as another parameter, you can set if you want the campaign to happen before and to the date point, only in the specified day or during and after that day, as showed in the image below. +As another parameter, you can choose whether the date point comparison looks for players whose stat falls on or before the date point, exactly on the date point, or on or after the date point, as illustrated below. ![Player Activities Date Options](../../../../media/imgs/player-activities-date-options.png){: style="height:auto;width:400px"} From 3955098229c3c7669a316eed2c14df72094bc4cf Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 11:03:08 -0500 Subject: [PATCH 19/32] Replace portal link with support hub link --- docs/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/index.md b/docs/index.md index 3ec747fb..fcf5b046 100644 --- a/docs/index.md +++ b/docs/index.md @@ -21,5 +21,5 @@ New to Beamable? Get up and running in minutes: Need help? We've got you covered: -- **[Community Portal](https://portal.beamable.com/)** - Connect with other developers -- **[GitHub Repository](https://github.com/beamable/BeamableProduct)** - Source code and issues \ No newline at end of file +- **[Support Hub](https://beamable.com/support)** - Connect with Beamable experts +- **[GitHub Repository](https://github.com/beamable/BeamableProduct)** - Source code and issues From b826f411fcebbe524ded06806378f0f3744152bd Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 11:08:29 -0500 Subject: [PATCH 20/32] cloud-save.md - minor spacing and wording --- .../beamable-services/profile-storage/cloud-save.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/profile-storage/cloud-save.md b/docs/unity/user-reference/beamable-services/profile-storage/cloud-save.md index 87d86c52..6d3e2049 100644 --- a/docs/unity/user-reference/beamable-services/profile-storage/cloud-save.md +++ b/docs/unity/user-reference/beamable-services/profile-storage/cloud-save.md @@ -49,7 +49,7 @@ When changes are detected by the service and finished saving locally, the Local Cloud Saved files are written to an object store that is managed by the Cloud Saving service. The key of the object is the MD5 checksum of the content in the file, this is done to preserve the history of the files. -The manifest tracks the MD5 checksum(etag) of the file and the common name(key) of the file, so we can fetch the object by its MD5 checksum and write it to disk using the common name. +The manifest tracks the MD5 checksum (etag) of the file and the common name (key) of the file, so we can fetch the object by its MD5 checksum and write it to disk using the common name. **Json Format** @@ -185,7 +185,7 @@ Here are the major operations that can be performed against the player data. ## Sample Code -Here is a sample code that demonstrates how to use the Cloud Save Service in Unity. This is a sample code that shows all the different options for using the Cloud Save Service. Note that this is an example for reference only. We do not recommend copying directly the functions used in the sample. +Here is some sample code that demonstrates how to use the Cloud Save Service in Unity. This sample code shows all the different options for using the Cloud Save Service. Note that this is an example for reference only. We do not recommend copying directly the functions used in the sample. CloudSavingServiceExample.cs From f111b87c13c3d6357769dd03e4419a128b8f9992 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 11:11:26 -0500 Subject: [PATCH 21/32] content-getting-started.md review updates - rename Armor to ArmorItem to clarify when we are talking about the class as opposed to the content type --- .../content/content-getting-started.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/profile-storage/content/content-getting-started.md b/docs/unity/user-reference/beamable-services/profile-storage/content/content-getting-started.md index 334af10b..094a5bd4 100644 --- a/docs/unity/user-reference/beamable-services/profile-storage/content/content-getting-started.md +++ b/docs/unity/user-reference/beamable-services/profile-storage/content/content-getting-started.md @@ -1,9 +1,10 @@ # Content - Getting Started -Beamable's ContentService allows game makers to create, manage, and distribute game content. Content can be created in the Beamable Content Manager window in the Unity Editor, and then published to Beamable's servers. Once published, content can be pulled into a game at runtime via the ContentService API. + +Beamable's Content Service allows game makers to create, manage, and distribute game content. Content can be created in the Beamable Content Manager window in the Unity Editor, and then published to Beamable's servers. Once published, content can be pulled into a game at runtime via the ContentService API. ## Creating Custom Content Types -In this snippet, the custom `Armor` item type is created. Note that, as a subclass of `ItemContent`, whose content type is already `"items"`, Armor's resulting content type will be `"items.armor"`. In the Content Manager in Unity, this will appear as a nested category under the `items` type. +In this snippet, the custom `ArmorItem` item type is created. Note that, as a subclass of `ItemContent`, whose content type is already `"items"`, Armor's resulting content type will be `"items.armor"`. In the Content Manager in Unity, this will appear as a nested category under the `items` type. Armor.cs ```csharp @@ -13,7 +14,7 @@ using Beamable.Common.Inventory; namespace Beamable.Examples.Services.ContentService { [ContentType("armor")] - public class Armor : ItemContent + public class ArmorItem : ItemContent { public string Name = ""; public int Defense = 0; @@ -21,7 +22,7 @@ namespace Beamable.Examples.Services.ContentService } ``` -In this snippet, the `Armor` reference is resolved for use at runtime. There are 2 different methods for resolving content. Both are shown here for comparison. In production, choose whichever one method works best for the needs of the project. +In this snippet, the `ArmorItem` reference is resolved for use at runtime. There are two different methods for resolving content. Both are shown here for comparison. In production, choose whichever one method works best for the needs of the project. See session [ContentLink vs ContentRef](content-overview.md#contentlink-and-contentref) in the Content Overview for more info. @@ -38,11 +39,11 @@ namespace Beamable.Examples.Services.ContentService public class ContentServiceCustomExample : MonoBehaviour { // Fields --------------------------------------- - [SerializeField] private ArmorLink _armorLink; - [SerializeField] private ArmorRef _armorRef; + [SerializeField] private ArmorItemLink _armorLink; + [SerializeField] private ArmorItemRef _armorRef; - private Armor _armorFromLink = null; - private Armor _armorFromRef = null; + private ArmorItem _armorFromLink = null; + private ArmorItem _armorFromRef = null; // Unity Methods -------------------------------- protected void Start() From 6e560ff4f5dd33414cca21d36540d8187f0bcf62 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 11:19:31 -0500 Subject: [PATCH 22/32] content-overview.md review updates - remove confusing "GCD" section that has doth-protest-too-much "this is not theoretical" sentence; why? - spacing and punctuation --- .../content/content-overview.md | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/profile-storage/content/content-overview.md b/docs/unity/user-reference/beamable-services/profile-storage/content/content-overview.md index 15313580..ab8fb847 100644 --- a/docs/unity/user-reference/beamable-services/profile-storage/content/content-overview.md +++ b/docs/unity/user-reference/beamable-services/profile-storage/content/content-overview.md @@ -20,7 +20,7 @@ Namespaces are locations for content to be published so that the content does no !!! warning Global Namespace - Beamable APIs that use content under the hood can only look to the global namespace. + Beamable APIs that use content under the hood, such as Commerce and Inventory, can only use entries from the "global" namespace. ## Content Data @@ -124,17 +124,19 @@ private async void SetupBeamable() } ``` -Beamable supports subscriptions to Content as well as direct references to certain pieces of content. Both of these will allow you to download content from the server, depending on the Game Maker's needs. +Beamable supports subscriptions to Content as well as direct references to individual pieces of content. Both of these will allow you to download content from the server as needed. ### ContentLink and ContentRef Subscriptions use a PlatformSubscription to dynamically read the data on the server, and fire a callback when the data is changed. However, ContentLink and ContentRef are both resolved manually when the data is needed. -Beamable supports 2 methodologies for referencing a content object; [`ContentLink`](https://csharp.cdocs.beamable.com/latest/classBeamable_1_1Common_1_1Content_1_1ContentLink.html) and [`ContentRef`](https://csharp.cdocs.beamable.com/latest/classBeamable_1_1Common_1_1Content_1_1ContentRef.html). While they are both very similar syntactically and need to be resolved before using, they perform differently and have different use-cases. +Beamable supports two methodologies for referencing a content object; [`ContentLink`](https://csharp.cdocs.beamable.com/latest/classBeamable_1_1Common_1_1Content_1_1ContentLink.html) and [`ContentRef`](https://csharp.cdocs.beamable.com/latest/classBeamable_1_1Common_1_1Content_1_1ContentRef.html). While they are both very similar syntactically and need to be resolved before using, they perform differently and have different use-cases. - `ContentLink` - Beamable will perform a first frame load to resolve the reference. `ContentLink`s must be present and resolvable (that is, they cannot be `null`) - `ContentRef` - Beamable will perform a lazy load to resolve the reference. As such, it is okay for a `ContentRef` to be `null` as long as it is never resolved +In short, `ContentLink`s are strict "hard" connections whereas `ContentRef`s are "soft" or "loose" connections. + ContentServiceExistingExample.cs ```csharp using System; @@ -301,7 +303,7 @@ Beamable provides a streamlined Content Publishing pipeline. You can deploy your ![content-management.png](../../../../../media/imgs/content-management.png){: style="height:auto;width:500px"} -When you create your Beamable account, we automatically create a "Development to Production" pipeline of distinct environments for you. These environments are "Dev" → "Staging" → "Production". This is how we enable you to publish your content to our servers for the development environment while allowing you the peace of mind to know that the "Production" environment has not been modified. +When you create your Beamable account, we automatically create a "Development to Production" pipeline of distinct environments for you. These environments are "Dev" → "Staging" → "Production". This is how Beamable enables you to publish your content for the development environment while allowing you the peace of mind to know that the "Production" environment has not been modified. Then, once you have tested that the new content in your environment looks correct, you can go into the Portal to promote the "Dev" content to "Staging" and eventually "Production". @@ -315,9 +317,9 @@ While using the Content Manager Editor (Unity Editor) it will be saved locally t /Assets/Beamable/Editor/content/ ``` -On Client's Builds (On-device) The development location is not included in the built game project. Instead, when the player loads the game, a fresh copy of all content is retrieved from the Beamable back-end and stored on-device. This allows Beamable to serve _dynamic_ content to the game project. By default, this is a lazy loading operation. Each of Beamable's feature prefabs show a loading progress indicator UI automatically. +On client builds for devices, the development location is not included in the built game project. Instead, when the player loads the game, a fresh copy of all content is retrieved from the Beamable backend and stored on device. This allows Beamable to serve _dynamic_ content to the game project. By default, this is a lazy loading operation. Each of Beamable's feature prefabs show a loading progress indicator UI automatically. -Content is stored on-device in a within Unity's [`Application.persistentDataPath`](https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html). +Content is stored on device within Unity's [`Application.persistentDataPath`](https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html). ```csharp Application.persistentDataPath + $"/content/{contentId}.json"; @@ -328,16 +330,6 @@ Content is cached by the client and stored both in memory and persisted to disk. See source code of `Runtime/DisruptorEngine/Content/ContentCache.cs` for more info. -## Game Content Designer - -Config data, or "Content" as it is called within Beamable, is realm-scoped and can be deployed from either... - -- **Unity** - Via Unity's [`ScriptableObject`](https://docs.unity3d.com/Manual/class-ScriptableObject.html) -- **Google Sheets** - Via Beamable's Game Content Designer - -Within the context of a CI/CD pipeline, game makers can create jobs that invoke the Content deployment function against data it pulled from source control, and pass in arguments for which realm this Content should go to. This is not theoretical, this is what game makers do today in production. - - ## Remote Configuration Workflows A fundamental pattern for using Beamable Content is **Remote Configuration**. With modest planning, game makers can maximize the user experience while minimizing the number of game updates shipped. This workflow allows game makers to update game content remotely and do so in real-time. Games can tweak existing features, launch new features, test out functionality -- all without necessarily shipping app updates or code changes.This can be especially useful for live-ops, seasonal events, and limited-time offers. From 7e2f5f495dc3f0e4a4774a6d95a3baf04855bf70 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 11:26:18 -0500 Subject: [PATCH 23/32] content-unity.md review updates - chop off extra verbiage about names of content features - replace i.e. with that is and e.g. with for example --- .../profile-storage/content/content-unity.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/profile-storage/content/content-unity.md b/docs/unity/user-reference/beamable-services/profile-storage/content/content-unity.md index 5e368b30..566fa0fc 100644 --- a/docs/unity/user-reference/beamable-services/profile-storage/content/content-unity.md +++ b/docs/unity/user-reference/beamable-services/profile-storage/content/content-unity.md @@ -1,6 +1,6 @@ # Unity Editor Integration of Beamable Content Services -The Unity SDK many features to support the Beamable Content Service within the Unity Editor including a Content Manager window, Conflict Handlings, Validation tools and others +The Unity SDK has many features to support the Beamable Content Service within the Unity Editor. ## Content Manager Editor @@ -44,11 +44,11 @@ The Content Manager now supports **Auto-Sync**, which automatically detects remo A file is marked as **Conflicted** only when: - Both local and remote versions have been modified, **and** -- The changes are incompatible (i.e., they don't match). +- The changes are incompatible (that is, they don't match). **No conflict is triggered if:** -- Both sides made identical changes (e.g., the same field updated to the same value). +- Both sides made identical changes (for example, the same field updated to the same value). - The file is deleted on both sides. - Only one side has changes (remote-only or local-only modifications sync normally). From aefb7e43b0d1554642a92cbed5369b49d7d3fa37 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 11:38:53 -0500 Subject: [PATCH 24/32] connectivity.md review updates - wording changes and capitalization --- .../social-networking/connectivity.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/social-networking/connectivity.md b/docs/unity/user-reference/beamable-services/social-networking/connectivity.md index ffa2c8e7..a06c343e 100644 --- a/docs/unity/user-reference/beamable-services/social-networking/connectivity.md +++ b/docs/unity/user-reference/beamable-services/social-networking/connectivity.md @@ -1,6 +1,6 @@ # Connectivity -The Connectivity drives the heartbeat sent back to the Beamable backend platform. If the game client loses connectivity, the heartbeat will stop and the Beamable API will gracefully wait for reconnection before resuming the full online feature-set. +The Connectivity system drives the heartbeat sent back to the Beamable backend platform. If the game client loses connectivity, the heartbeat will stop and the Beamable API will gracefully wait for reconnection before resuming the full online feature-set. The system monitors internet connectivity and updates automatically if any changes occur; including remote server outages or loss of local ethernet/Wi-Fi internet. @@ -13,14 +13,14 @@ The main API highlights include [`ConnectivityService`](https://csharp.cdocs.bea | Method Name | Detail | | :---------- | :----- | | HasConnectivity | Getter. Determines if the app has internet connectivity | -| SetHasInternet | Setter. Determines if the app has internet connectivity

_Note: Calling this is not required. The Beamable system will properly monitor connectivity and update the ConnectivityService._ | +| SetHasInternet | Setter. Determines if the app has internet connectivity

_Note: Calling this is not required. The Beamable system will automatically monitor connectivity and update the ConnectivityService._ | ### Sample Code Here are some code examples to help you get started. -In this `ConnectivityServiceExample.cs`, the UI shows the current state of the internet connectivity and updates automatically if any changes occur (ex. if the ethernet / Wi-Fi is manually disabled or enabled by the user). +In this `ConnectivityServiceExample.cs`, the UI shows the current state of the internet connectivity and updates automatically if any changes occur (for example, if the ethernet / Wi-Fi is manually disabled or enabled by the user). ConnectivityServiceExample.cs ```csharp @@ -117,7 +117,7 @@ namespace Beamable.Examples.Services.ConnectivityService ### Disable Network Connection -Game makers can set a global disable to simulate not having wifi before BeamContext initialization. +Game makers can set a global disable to simulate not having Wi-Fi before BeamContext initialization. ```csharp private static void ForceDisableConnectivity() @@ -363,7 +363,7 @@ A few noteworthy clarifications: 2. **ConnectivityService**: This service maintains the state on whether internet connectivity is currently available, and is also responsible for invoking any reconnect hooks and so forth 2. The NoConnectivityException errors can occur as a result of a couple of conditions: 1. The **ConnectivityChecker**, which checks connectivity every 3 seconds, experiences a failure **OR** - 2. A request to Beamable experiences a timeout or HTTP status code 0 from Unity + 2. A request to Beamable experiences a timeout or HTTP status code 0 from Unity Beamable also makes regular heartbeat calls which may also fall into this class 3. When a NoConnectivityException is encountered, the **ConnectivityService** is notified that the internet connection has been lost, and the **ConnectivityService** then invokes any relevant hooks for reconnecting when the service is restored. From 5f2bc7ac1edfa82d8c60004f608919a23330a5b5 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 11:42:44 -0500 Subject: [PATCH 25/32] friends.md review updates - wording change from "automatically" to "in bulk" to avoid the implication that the import is implicitly invoked --- .../beamable-services/social-networking/friends.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/unity/user-reference/beamable-services/social-networking/friends.md b/docs/unity/user-reference/beamable-services/social-networking/friends.md index 0d0fab74..a8944a6d 100644 --- a/docs/unity/user-reference/beamable-services/social-networking/friends.md +++ b/docs/unity/user-reference/beamable-services/social-networking/friends.md @@ -170,7 +170,7 @@ public class FriendsSample : MonoBehaviour #### Importing Friends from Facebook -A player who has associated a Facebook credential with their account may automatically import Facebook friends. Facebook friends who have also linked a Facebook credential will be listed as Beamable friends. When one player imports Facebook friends, all imported friends will have the initiating player as a friend as well. +A player who has associated a Facebook credential with their account may import Facebook friends in bulk. Facebook friends who have also linked a Facebook credential will be listed as Beamable friends. When one player imports Facebook friends, all imported friends will have the initiating player as a friend as well. ```csharp using Beamable; From 98fcb7619909b53c86b18b7b76d2f22e7c1c0283 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 11:43:45 -0500 Subject: [PATCH 26/32] groups.md review updates - replace e.g. with such as --- .../beamable-services/social-networking/groups.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/social-networking/groups.md b/docs/unity/user-reference/beamable-services/social-networking/groups.md index ba327a2c..a7c03fe7 100644 --- a/docs/unity/user-reference/beamable-services/social-networking/groups.md +++ b/docs/unity/user-reference/beamable-services/social-networking/groups.md @@ -7,8 +7,8 @@ The purpose of this feature is to allow players to play together in-game. Players can create groups and interact in real-time. Interactions include donating currency between group members for spending on in-game items. Depending on the game design, group members may have shared goals where interaction and collaboration are a key part of success. Here are some common use cases for the Groups feature: -• **Collaboration** - Group members may share resources to progress on common goals (e.g. quests) -• **Competition** - All groups in the game community compete directly and indirectly for rewards +• **Collaboration** - Group members may share resources to progress on common goals (such as quests) +• **Competition** - All groups in the game community compete directly and indirectly for rewards • **Communication** - Groups functionality integrates with text chat. See [Chat](chat.md) for more info Here is the glossary of group-related terms. From e12bd372cd7a2cc1ec3928457bbfc9f9ec48fa06 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 11:46:57 -0500 Subject: [PATCH 27/32] matchmaking.md review updates - getting rid of more e.g.s --- .../beamable-services/social-networking/matchmaking.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/social-networking/matchmaking.md b/docs/unity/user-reference/beamable-services/social-networking/matchmaking.md index 390b2dfd..9b6700c4 100644 --- a/docs/unity/user-reference/beamable-services/social-networking/matchmaking.md +++ b/docs/unity/user-reference/beamable-services/social-networking/matchmaking.md @@ -2,9 +2,9 @@ The Beamable **Multiplayer** feature allows game makers to create real-time and turn-based multi-user game experiences. For a project to offer multiplayer, it must first offer **matchmaking**. -In multiplayer gaming, matchmaking is the process of creating/finding a **Match** (e.g. Multiplayer 'Room') based on criteria. For example, a client could say "give me a match to play in with 2 total players of any skill level". Beamable supports matchmaking through its [`MatchmakingService`](https://csharp.cdocs.beamable.com/latest/classBeamable_1_1Experimental_1_1Api_1_1Matchmaking_1_1MatchmakingService.html). +In multiplayer gaming, matchmaking is the process of creating/finding a **Match** (for example, a Multiplayer 'Room') based on criteria. For example, a client could say "give me a match to play in with 2 total players of any skill level". Beamable supports matchmaking through its [`MatchmakingService`](https://csharp.cdocs.beamable.com/latest/classBeamable_1_1Experimental_1_1Api_1_1Matchmaking_1_1MatchmakingService.html). -The Matchmaking service has many built-in events to attach listeners (e.g. match starting, search timeout, etc). This makes it very simple to connect your game's custom UI to Beamable's services. +The Matchmaking service has many built-in events to attach listeners (match starting, search timeout, etc). This makes it very simple to connect your game's custom UI to Beamable's services. The outcome of a successful matchmaking search gives the participating players a match ID. This can be used to integrate Beamable's in-house [Multiplayer](multiplayer.md) solution, or a third-party multiplayer suite such as [Photon](https://www.photonengine.com/). From 62e5a2477953bb8655af3bf00f8d173502957083 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 11:52:36 -0500 Subject: [PATCH 28/32] tournaments.md review updates - getting rid of e.g.s in prose section - keeping e.g.s in table since brevity (narrowness) is important there --- .../beamable-services/social-networking/tournaments.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/social-networking/tournaments.md b/docs/unity/user-reference/beamable-services/social-networking/tournaments.md index e0a9eb78..a5168e15 100644 --- a/docs/unity/user-reference/beamable-services/social-networking/tournaments.md +++ b/docs/unity/user-reference/beamable-services/social-networking/tournaments.md @@ -173,13 +173,13 @@ Game Makers set up tournaments by defining their content. This content includes ### Testing Notes -- **Manage Test Tournaments**. Tournaments set to cycle frequently (e.g., hourly) for testing purposes can cause issues if left active. It is best practice to delete these test tournaments after completing your testing. +- **Manage Test Tournaments**. Tournaments set to cycle frequently (for example, hourly) for testing purposes can cause issues if left active. It is best practice to delete these test tournaments after completing your testing. - **Early Cycle Termination**. Game makers can end a tournament cycle early. However, this action only affects the current cycle. Subsequent tournaments remain scheduled and operate under their original time cycle parameters. -- **Avoid Cadence Changes on Existing Tournaments**. Changing the cadence (e.g., from daily to weekly) for a tournament that already exists with a specific Tournament ID can lead to errors during testing. To avoid issues, create a new tournament (with new Tournament ID) when a different cadence is desired. +- **Avoid Cadence Changes on Existing Tournaments**. Changing the cadence (for example, from daily to weekly) for a tournament that already exists with a specific Tournament ID can lead to errors during testing. To avoid issues, create a new tournament (with new Tournament ID) when a different cadence is desired. ### Protips - While both leaderboards and tournament content are viewable within the Beamable portal, direct management of Tournaments currently requires API calls. - Player scores persist for the duration of the tournament cycle; when players enter the next cycle their scores begin at 0, but within the new tier and stage dictated by promotion or demotion. - From cycle to cycle, player scores are reset to 0 but tiers persist. If you, the Game Maker, wish to carry over previous Tournament scores, a separate microservice will be required to pre-seed this information when each new cycle starts. -- Tournaments differ from Events by featuring a recurring time cycle. Events each have a beginning and end, and potentially multiple phases. Events can have one-off occurrences or be scheduled to recur, but Tournaments always require a cadence. \ No newline at end of file +- Tournaments differ from Events by featuring a recurring time cycle. Events each have a beginning and end, and potentially multiple phases. Events can have one-off occurrences or be scheduled to recur, but Tournaments always require a cadence. From 6df7fbb7325ad364a50642add5fb2ce87c7e8564 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 11:57:46 -0500 Subject: [PATCH 29/32] microservice-framework.md review updates - reword list of possible game engines - delete UseLegacySerialization section that is not pertinent to any new games nor any current upgrade paths --- .../cloud-services/microservices/microservice-framework.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/unity/user-reference/cloud-services/microservices/microservice-framework.md b/docs/unity/user-reference/cloud-services/microservices/microservice-framework.md index 38a333df..2e226102 100644 --- a/docs/unity/user-reference/cloud-services/microservices/microservice-framework.md +++ b/docs/unity/user-reference/cloud-services/microservices/microservice-framework.md @@ -1,6 +1,6 @@ # Microservices Overview -Beamable Microservices are small C# projects that can handle web traffic for your game in Unity, Unreal, or custom engine. The C# project is written with the modern dotnet library which means you have full access to the vast majority of dotnet features, including Nuget, Msbuild, and the myriad of performance improvements available in recent dotnet updates. +Beamable Microservices are small C# projects that can handle web traffic for your Unity game, Unreal game, or custom engine game. The C# project is written with the modern dotnet library which means you have full access to the vast majority of dotnet features, including Nuget, Msbuild, and the myriad of performance improvements available in recent .NET updates. !!! warning "Dotnet and Docker Dependency!" @@ -255,10 +255,6 @@ However, within a Beamable's Microservice, game makers must rely instead on Beam |-----------------|-------------------| | [Microservice Serialization Supported Types](https://docs.google.com/spreadsheets/d/1EWGhLQmoDIEAjwHk6Fn0BTJ3u8yAj5B2TxbefuBvZ88/edit?usp=sharing) | All other types | -#### UseLegacySerialization - -A breaking change is introduced in Beamable SDK v0.11.0. If you began your project with an **earlier** version of the SDK, see [Beamable Releases Unity SDK Version 0.11.0](https://www.beamable.com/blog/beamable-releases-unity-sd-version-0-11-0) for more info. Otherwise, simply disregard this issue. - ### Handling Errors When a call to a Beamable service fails, it will throw a `RequesterException`. The exception can be caught using standard C# try/catch practices. In the example below, the call to `SetCurrency` will fail, and the `catch` block will capture a `RequesterException` that exposes details about the failure. From 9eaec6d8c8fad70967223025da8cc109d09d6b51 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 11:59:38 -0500 Subject: [PATCH 30/32] microstorages.md review updates - mongo -> MongoDB --- docs/unity/user-reference/cloud-services/microstorages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/unity/user-reference/cloud-services/microstorages.md b/docs/unity/user-reference/cloud-services/microstorages.md index fb7fbaae..3fe1e878 100644 --- a/docs/unity/user-reference/cloud-services/microstorages.md +++ b/docs/unity/user-reference/cloud-services/microstorages.md @@ -1,6 +1,6 @@ # Microstorages -Beamable Microstorages are mongo databases that integrate seamlessly with Beamable Microservices to provide powerful custom state management solutions. Microstorages have a C# project written in dotnet that _represents_ the storage database. This C# project is used as identity, and can be a place to put data related code, such as model types. Beamable Microservices can access storage objects through the `Storages` accessor. +Beamable Microstorages are MongoDB databases that integrate seamlessly with Beamable Microservices to provide powerful custom state management solutions. Microstorages have a C# project written in dotnet that _represents_ the storage database. This C# project is used as identity, and can be a place to put data related code, such as model types. Beamable Microservices can access storage objects through the `Storages` accessor. ## Getting Started From e1c3dc854ff1ff077ca5e052a76b7dd8441d6b67 Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 12:03:32 -0500 Subject: [PATCH 31/32] Spacing, punctuation, grammar. --- .../beamable-services/social-networking/lobbies.md | 2 +- docs/unity/user-reference/cloud-services/scheduled-jobs.md | 4 ++-- docs/unity/user-reference/editor-systems/beam-library.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/unity/user-reference/beamable-services/social-networking/lobbies.md b/docs/unity/user-reference/beamable-services/social-networking/lobbies.md index 243bc06f..cb262918 100644 --- a/docs/unity/user-reference/beamable-services/social-networking/lobbies.md +++ b/docs/unity/user-reference/beamable-services/social-networking/lobbies.md @@ -12,7 +12,7 @@ Lobbies can also be found by game type and optionally setting a limit or skip va To join a lobby requires a `lobbyId` in the case of an open lobby and `passcode` in the case of a closed lobby. -Other actions provided by the Beamable **Lobbies** feature includes: +Other actions provided by the Beamable **Lobbies** feature include: - Adding players to the lobby - Removing players from the lobby diff --git a/docs/unity/user-reference/cloud-services/scheduled-jobs.md b/docs/unity/user-reference/cloud-services/scheduled-jobs.md index 6283f9a8..fa425a28 100644 --- a/docs/unity/user-reference/cloud-services/scheduled-jobs.md +++ b/docs/unity/user-reference/cloud-services/scheduled-jobs.md @@ -52,7 +52,7 @@ var job = await Services.Scheduler.Schedule() .Save("sample"); ``` -The `.Http()` method allows the developer to use the `.Run()` function which creates a HTTP action for the job. Optionally, a third parameter can be given as the body for the HTTP request. By default, the HTTP action will use JSON to serialize any request payload. There are overloads of the method available that allow a developer to specify a custom body, accept header, and custom headers. +The `.Http()` method allows the developer to use the `.Run()` function which creates a HTTP action for the job. Optionally, a third parameter can be given as the body for the HTTP request. By default, the HTTP action will use JSON to serialize any request payload. There are overloads of the method available that allow a developer to specify a custom body, accept header, and custom headers. ## Job Triggers @@ -237,4 +237,4 @@ public class ExampleService : Microservice await assumed.Services.Inventory.AddCurrency("currency.gems", 10); } } -``` \ No newline at end of file +``` diff --git a/docs/unity/user-reference/editor-systems/beam-library.md b/docs/unity/user-reference/editor-systems/beam-library.md index 6e9a928d..2391b589 100644 --- a/docs/unity/user-reference/editor-systems/beam-library.md +++ b/docs/unity/user-reference/editor-systems/beam-library.md @@ -25,7 +25,7 @@ The purpose of this feature is to offer the game maker an in-game UI for executi #### Usage -The Admin Flow can be opened at runtime in multiple ways... +The Admin Flow can be opened at runtime in multiple ways: - Within the Unity Editor, press the "~" key - Within a Mobile Build, use a "three-finger swipe-up gesture" From 42b27c9dbe8ca06a859605e12a920392779f71fd Mon Sep 17 00:00:00 2001 From: Allister MacLeod Date: Mon, 2 Feb 2026 12:10:05 -0500 Subject: [PATCH 32/32] builds-environments.md review updates - correct spelling of config-defaults.txt - formatting on filenames and directory names --- .../user-reference/editor-systems/builds-environments.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/unity/user-reference/editor-systems/builds-environments.md b/docs/unity/user-reference/editor-systems/builds-environments.md index 2e79ddda..41f84e49 100644 --- a/docs/unity/user-reference/editor-systems/builds-environments.md +++ b/docs/unity/user-reference/editor-systems/builds-environments.md @@ -4,13 +4,13 @@ If you run the project in the Unity editor in play mode, the realm that will act ![Realm Selector in Unity Editor](../../../media/imgs/realm-selector-unity-editor.png){width=600px} -When you do a build in Unity, the realm that is selected for the build is whatever is stored in the config-default.txt file. +When you do a build in Unity, the realm that is selected for the build is whatever is stored in the `config-defaults.txt` file in the `Assets/Beamable/Resources/` folder. -To update what is in the config-defaults.txt, you can open the account section, and click the "Save Configs-Defaults" file which will save whatever realm you are using in the editor to the file. +To update what is in `config-defaults.txt`, you can open the account section, and click the "Save Config-Defaults" file which will save whatever realm you are using in the editor to the file. ![Save Config Defaults Button](../../../media/imgs/save-config-defaults-button.png){width=400px} -For automated builds (e.g. Unity Cloud, Github Actions, etc.), we also have a Unity pre-build script which will swap out the realm based on an environment variable. You can basically have multiple config-.txt files. +For automated builds (such as Unity Cloud, Github Actions, etc.), we also have a Unity pre-build script which will swap out the realm based on an environment variable. You can basically have multiple `config-.txt` files. ![Multiple Config Files Example](../../../media/imgs/multiple-config-files-example.png){width=300px}