Documentation

Cloud Code C# modules

Deploy reusable, server authoritative C# libraries that allow multiple entry points and generate type-safe client bindings.
Read time 5 minutesLast updated 3 days ago

Modules are C# libraries that the Cloud Code service can run to give you reusable server authoritative code. Unlike Cloud Code scripts, modules allow for multiple entry points and easier code reuse within the module.
You can generate bindings for your modules from the Unity Editor to ensure that the data you transfer between the Cloud Code client and your game use the same format.
You can call modules from games built with Unity, or from any other client or server.

Benefits of C# modules

C# modules have the following benefits:
  • Modules support code reuse, which improves the maintainability of your project. Like any C# project, you can share classes and logic between endpoints in the same module.
  • Module endpoints deploy together, which allows your data models to always be in sync.
  • The Unity Editor can call modules in a type safe way, which helps to prevent errors with misspelled method names and incorrect data parameters.
  • Modules support an in-memory cache, which can speed up response times and reduce costs.

Authoring method

Description

Unity EditorCreate, compile, and deploy modules directly in the Editor as Unity Cloud Code modules (
.ccmu
). Recommended.
Module referenceLink a C# module reference file to a separate module solution in the Editor.
UGS CLIDeploy and manage modules from the command line.
REST APICreate, deploy, and manage modules through the Cloud Code REST API.
Unity DashboardPreview a list of deployed modules.
Note
Cloud Code C# modules can't use classes from the
UnityEngine
namespace or anything else in the Unity's scripting API. This is because Cloud Code uses the open-source .NET runtime (up to version 9 is supported). This is separate from the Unity runtime and doesn't rely on any of its scripting backends.

Typical workflow

The following process details a typical development cycle:
  1. Create a C# library project. Create a solution in the Unity Editor or use the UGS CLI to create a new module project.
  2. Write the code. Use the Cloud Code C# service SDKs to integrate with other Unity services. Use the HTTP client to integrate with external services. For games that need persistent state, use Stateful Cloud Code.
  3. Test and debug. Create a unit test project for your module to validate that everything works as intended, or deploy the library on a development environment to test it with real user data.
  4. Deploy the module. Deploy the project via the Deployment window in the Unity Editor or UGS CLI or to make it available within Cloud Code.
  5. Integrate the module with your project. Import the Cloud Code SDK into your game and use one of the provided methods to call your script.

Getting started

Learn the basics of creating and running modules.

Topic

Description

Create a moduleGet started with modules.
Module structureLearn about the structure of a module project.
Develop modulesLearn how to develop modules using different authoring methods.
Run modulesLearn how to run modules from Unity Runtime, using REST API
Error handlingLearn how handle errors in your modules.
LoggingLearn how to use logging to debug your module.
LimitsLearn about the limits of Cloud Code modules.
CostLearn about the cost of Cloud Code modules.

Development essentials

Learn how to structure your modules. Modules support dependency injection, DTOs, and custom serialization to make your development easier.

Topic

Description

Module structureLearn about the structure of a module project.
Dependency injectionDecouple dependencies in your code.
Unit testsWrite unit tests for your module.
Custom serializationLearn how to use custom serialization using
Newtonsoft.Json
properties.
Batch requestsBatch requests.
In-memory cacheCache slow-changing data between module endpoints to reduce latency.
Run a local Cloud Code serverRun a Cloud Code server on your local machine to iterate on and debug modules.

Stateful Cloud Code

By default, Cloud Code is stateless. For games that require persistent state, such as card, puzzle, and idle games, Stateful Cloud Code uses scopes to retain data across module function calls.

Topic

Description

State scopesRetain state for individual players or multiplayer sessions using scopes.
State serializationControl how the runtime serializes and persists your module's scoped state.
TimersSchedule delayed Cloud Code function calls for cooldowns, turn timers, and more.
Function access controlControl who can invoke individual functions using an access parameter.
Turn change notification patternsNotify clients of turn changes in synchronous and asynchronous multiplayer games.

Automate deployment

To streamline the development and deployment of your modules, you can automate the process.

Topic

Description

Integrate with CI/CDIntegrate the deployment of your module with your CI/CD pipeline.
Automate local deploymentAutomate the deployment of your module to the Cloud Code service.

Integrate further

You can integrate modules with other Unity Gaming Services and any external services, and access cross-player data.
To integrate with other services using their C# SDKs, you can install
NuGet
packages, or you can use a HTTP client.

Topic

Description

AuthenticationLearn how to authenticate your game client with Cloud Code.
Service and access token supportLearn which UGS services and access tokens Cloud Code supports.
Available librariesFind the available UGS SDKs included with Cloud Code modules.
Access controlLearn how to control access and prevent unwanted usage.
Integrate with Unity ServicesLearn about connecting Cloud Code to other Unity services.
Integrate with external servicesLearn how to integrate with external services.
Interact with cross-player dataLearn how to access and update data for other players.
Send push messages to playersLearn how to send push messages to players.
TriggersLearn how to use triggers to run your modules on a schedule, or in response to events.

Advanced configuration

If you need a more in-depth configuration for your module, you can use the following guides.
Important
These topics are for advanced users who want to optimize their module for a specific use case.

Topic

Description

Manual workflowLearn how to manually create, package, and deploy your module.
Package codeLearn how to package your module code into a
.ccm
file for deployment.
Automate local deployment using the project fileAutomate the deployment of your module using the project file.
Data transfer objectsLearn how to use data transfer objects to ensure that all data transferred between the Cloud Code client and your game use the same format.