unity-packages-services-15a838 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited unity-packages-services-15a838 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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("[email protected]");
// Remove: Client.Remove("com.unity.cinemachine");
// List: Client.List(); // Returns ListRequest, poll IsCompleted
}
#endifUnityServices.InitializeAsync() first. All UGS services depend on this.StartDataCollection() only after obtaining consent. Violating privacy regulations risks legal action and platform removal.#v1.0.0) to prevent unexpected breaking changes.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 |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.