From unity
Unity 6 packages and services guide. Use when working with Package Manager, installing/updating packages, scoped registries, or Unity Gaming Services (Authentication, Cloud Save, Analytics, Leaderboards, Matchmaker). Covers essential packages list and version compatibility. Based on Unity 6.3 LTS documentation.
npx claudepluginhub cdata/aria-skills --plugin unityThis skill uses the workspace's default tool permissions.
The Package Manager window (accessed via **Window > Package Manager**) manages UPM packages, feature sets, and asset packages.
Controls Unity Editor from terminal via ucp CLI over WebSocket/JSON-RPC bridge. Automates scenes, GameObjects, assets, prefabs, builds, tests, packages, and debugging headless.
Builds optimized Unity games with C# scripts, URP/HDRP rendering, asset management, gameplay systems, UI, and cross-platform deployment. For performance issues, mechanics, builds.
Builds Unity games with optimized C# scripts, URP/HDRP rendering pipelines, asset management, performance profiling, and cross-platform deployment for Unity 6 LTS.
Share bugs, ideas, or general feedback.
The Package Manager window (accessed via Window > Package Manager) manages UPM packages, feature sets, and asset packages.
Edit Packages/manifest.json directly to add dependencies:
{
"dependencies": {
"com.unity.addressables": "2.9.1",
"com.unity.cinemachine": "3.1.0",
"com.unity.inputsystem": "1.19.0"
}
}
Add packages from Git repositories:
{
"dependencies": {
"com.example.package": "https://github.com/user/repo.git#v1.0.0"
}
}
Or via the Package Manager UI: click the + button > Add package from git URL.
Scoped registries enable Package Manager to communicate with custom package registry servers, allowing access to multiple package collections simultaneously.
Organizations use scoped registries to distribute custom packages internally.
Add to Packages/manifest.json:
{
"scopedRegistries": [
{
"name": "My Company Registry",
"url": "https://npm.mycompany.com",
"scopes": [
"com.mycompany",
"com.mycompany.tools"
]
}
],
"dependencies": {
"com.mycompany.core-utils": "1.0.0"
}
}
| Property | Type | Description |
|---|---|---|
name | String | Display name shown in Package Manager UI |
url | String | npm-compatible registry server endpoint |
scopes | Array | Package namespaces to route to this registry |
com.example, not @scope)The registry server must implement the /-/v1/search or /-/all endpoints. Not all npm registries are compatible.
For protected registries, configure credentials in your Package Manager user configuration file using npm authentication patterns.
Unity 6.3 LTS ships with 133 released (verified) packages. See references/common-packages.md for the full categorized list with IDs and versions.
| Package | ID | Version |
|---|---|---|
| Input System | com.unity.inputsystem | 1.19 |
| Addressables | com.unity.addressables | 2.9 |
| Cinemachine | com.unity.cinemachine | 3.1 |
| Burst | com.unity.burst | 1.8 |
| Collections | com.unity.collections | 2.6 |
| Entities | com.unity.entities | 1.4 |
| Timeline | com.unity.timeline | 1.8 |
| Netcode for GameObjects | com.unity.netcode.gameobjects | 2.10 |
| Localization | com.unity.localization | 1.5 |
| ProBuilder | com.unity.probuilder | 6.0 |
| Visual Scripting | com.unity.visualscripting | 1.9 |
| Package | ID |
|---|---|
| Authentication | com.unity.services.authentication |
| Cloud Save | com.unity.services.cloudsave |
| Analytics | com.unity.services.analytics |
| Cloud Code | com.unity.services.cloudcode |
| Economy | com.unity.services.economy |
| Leaderboards | com.unity.services.leaderboards |
| In-App Purchasing | com.unity.purchasing |
| Remote Config | com.unity.remote-config |
Unity Gaming Services (UGS) is a suite of backend services for live game operations. Services include Authentication, Cloud Save, Cloud Code, Analytics, Economy, Leaderboards, Friends, Multiplayer, Matchmaker, and more.
using Unity.Services.Core;
using UnityEngine;
public class ServicesInitializer : MonoBehaviour
{
async void Start()
{
await UnityServices.InitializeAsync();
Debug.Log("Unity Services initialized");
}
}
The Authentication service provides player identity management. Install com.unity.services.authentication.
using Unity.Services.Authentication;
using Unity.Services.Core;
using UnityEngine;
public class AuthManager : MonoBehaviour
{
async void Start()
{
await UnityServices.InitializeAsync();
AuthenticationService.Instance.SignedIn += () =>
{
Debug.Log($"Signed in. Player ID: {AuthenticationService.Instance.PlayerId}");
};
await AuthenticationService.Instance.SignInAnonymouslyAsync();
}
}
| API | Purpose |
|---|---|
AuthenticationService.Instance.SignInAnonymouslyAsync() | Anonymous sign-in |
AuthenticationService.Instance.PlayerId | Get current player ID |
AuthenticationService.Instance.IsSignedIn | Check sign-in status |
AuthenticationService.Instance.SignOut() | Sign out current player |
AuthenticationService.Instance.AccessToken | Get current access token |
Cloud Save persists player data and game state to the cloud. Install com.unity.services.cloudsave.
using Unity.Services.CloudSave;
using Unity.Services.Core;
using Unity.Services.Authentication;
using UnityEngine;
using System.Collections.Generic;
public class CloudSaveManager : MonoBehaviour
{
async void Start()
{
await UnityServices.InitializeAsync();
await AuthenticationService.Instance.SignInAnonymouslyAsync();
// Save data
var data = new Dictionary<string, object>
{
{ "playerLevel", 5 },
{ "playerName", "Hero" },
{ "highScore", 12500 }
};
await CloudSaveService.Instance.Data.Player.SaveAsync(data);
Debug.Log("Data saved to cloud");
// Load data
var keys = new HashSet<string> { "playerLevel", "highScore" };
var loadedData = await CloudSaveService.Instance.Data.Player.LoadAsync(keys);
if (loadedData.TryGetValue("playerLevel", out var levelItem))
{
int level = levelItem.Value.GetAs<int>();
Debug.Log($"Player level: {level}");
}
}
}
| API | Purpose |
|---|---|
CloudSaveService.Instance.Data.Player.SaveAsync() | Save player key-value data |
CloudSaveService.Instance.Data.Player.LoadAsync() | Load player data by keys |
CloudSaveService.Instance.Data.Player.LoadAllAsync() | Load all player data |
CloudSaveService.Instance.Data.Player.DeleteAsync() | Delete specific keys |
Unity Analytics tracks player behavior and game events. Install com.unity.services.analytics.
using Unity.Services.Analytics;
using Unity.Services.Core;
using UnityEngine;
public class AnalyticsManager : MonoBehaviour
{
async void Start()
{
await UnityServices.InitializeAsync();
AnalyticsService.Instance.StartDataCollection();
}
public void RecordLevelComplete(int level, float time)
{
var parameters = new Dictionary<string, object>
{
{ "levelIndex", level },
{ "completionTime", time },
{ "livesRemaining", 3 }
};
AnalyticsService.Instance.CustomData("levelComplete", parameters);
}
public void RecordPurchase(string itemId, float price)
{
var parameters = new Dictionary<string, object>
{
{ "itemId", itemId },
{ "price", price },
{ "currency", "USD" }
};
AnalyticsService.Instance.CustomData("itemPurchased", parameters);
}
}
AnalyticsService.Instance.StartDataCollection() after obtaining user consentAnalyticsService.Instance.StopDataCollection() if user revokes consent| API | Purpose |
|---|---|
AnalyticsService.Instance.StartDataCollection() | Begin collecting analytics data |
AnalyticsService.Instance.StopDataCollection() | Stop collecting data |
AnalyticsService.Instance.CustomData() | Record a custom event with parameters |
AnalyticsService.Instance.Flush() | Force-send queued events |
using Unity.Services.Core;
using Unity.Services.Authentication;
using UnityEngine;
public class GameBootstrap : MonoBehaviour
{
async void Awake()
{
try
{
await UnityServices.InitializeAsync();
await AuthenticationService.Instance.SignInAnonymouslyAsync();
Debug.Log($"Player ID: {AuthenticationService.Instance.PlayerId}");
// Now safe to use Cloud Save, Analytics, etc.
}
catch (ServicesInitializationException e)
{
Debug.LogError($"Services failed to initialize: {e.Message}");
}
catch (AuthenticationException e)
{
Debug.LogError($"Authentication failed: {e.Message}");
}
}
}
#if UNITY_EDITOR
using UnityEditor.PackageManager;
public static class PackageHelper
{
// Install: Client.Add("com.unity.cinemachine@3.1.0");
// Remove: Client.Remove("com.unity.cinemachine");
// List: Client.List(); // Returns ListRequest, poll IsCompleted
}
#endif
Not initializing UnityServices before using any service. Always call UnityServices.InitializeAsync() first. All UGS services depend on this.
Not authenticating before using Cloud Save or other player-bound services. Authentication is required before accessing per-player data.
Collecting analytics without user consent. Call StartDataCollection() only after obtaining consent. Violating privacy regulations risks legal action and platform removal.
Storing sensitive data in Cloud Save without encryption. Cloud Save is key-value storage, not a secure vault. Encrypt sensitive data before saving.
Hardcoding package versions in manifest.json without checking compatibility. Always verify package versions are compatible with your Unity version. Use the Package Manager UI to check verified versions.
Installing packages via git URL for production without pinning a version/tag. Always specify a tag or commit hash (e.g., #v1.0.0) to prevent unexpected breaking changes.
Not handling service errors gracefully. UGS calls are async network operations. Always wrap in try/catch and handle offline scenarios.
Using Resources.Load instead of Addressables for dynamic content. Resources folder cannot be updated post-build. Addressables support remote content updates.
Adding scoped registries with overly broad scopes. Broad scopes like com will route many packages to your custom registry. Use specific scopes like com.mycompany.
| API | Purpose |
|---|---|
UnityServices.InitializeAsync() | Initialize all UGS services |
AuthenticationService.Instance | Access authentication service |
CloudSaveService.Instance | Access cloud save service |
AnalyticsService.Instance | Access analytics service |
UnityEditor.PackageManager.Client.Add() | Install a package via script |
UnityEditor.PackageManager.Client.List() | List installed packages |
UnityEditor.PackageManager.Client.Remove() | Remove a package via script |