Unity SDK
Complete Unity integration guide for Ilara. Supports Unity 2020.3+ with C# API.
Requirements
- Unity 2020.3 LTS or newer
- Mono or IL2CPP scripting backend
- iOS, Android, Windows, macOS, Linux, or WebGL
Installation
Unity Package Manager (Recommended)
Add the package via git URL in your manifest.json:
Packages/manifest.json
json
{class="code-string">"dependencies": {class="code-string">"com.ilara.sdk": class="code-string">"https:class="code-commentclass="code-string">">//github.com/ilara/unity-sdk.git"}}
Or via the UI: Window → Package Manager → + → Add package from git URL
Manual Installation
- Download the latest release from GitHub
- Import the .unitypackage into your project
- The SDK will be installed at Assets/Ilara/
Configuration
Create a configuration asset: Assets → Create → Ilara → Config
Configure in the Inspector or via code:
Quick Start
GameManager.cs
csharp
using Ilara;using UnityEngine;public class GameManager : MonoBehaviour{async void Start(){class=class="code-string">"code-comment">// Initialize from config in Resources folderawait IlaraClient.Instance.Initialize();class=class="code-string">"code-comment">// Or with explicit configvar config = Resources.Load(class="code-string">"MyConfig"); await IlaraClient.Instance.Initialize(config);class=class="code-string">"code-comment">// Identify the playervar player = await IlaraClient.Instance.IdentifyPlayer(class="code-string">"player_123");Debug.Log($class="code-string">"Player stage: {player.lifecycle_stage}");}}
Player Management
Identify Players
csharp
class=class="code-string">"code-comment">// Basic identificationvar player = await IlaraClient.Instance.IdentifyPlayer(class="code-string">"player_123");class=class="code-string">"code-comment">// With attributesvar player = await IlaraClient.Instance.IdentifyPlayer(externalId: class="code-string">"player_123",attributes: new Dictionary<string, object> {{ class="code-string">"level", 45 },{ class="code-string">"country", class="code-string">"US" },{ class="code-string">"vip_tier", class="code-string">"gold" }},deviceId: SystemInfo.deviceUniqueIdentifier,email: class="code-string">"[email protected]");class=class="code-string">"code-comment">// Access player dataDebug.Log($class="code-string">"Ilara ID: {player.Id}");Debug.Log($class="code-string">"Lifecycle: {player.LifecycleStage}");Debug.Log($class="code-string">"Sessions: {player.SessionCount}");Debug.Log($class="code-string">"Revenue: ${player.TotalRevenue}");
Update Attributes
csharp
class=class="code-string">"code-comment">// Update player attributesawait IlaraClient.Instance.UpdatePlayerAttributes(new {level = 46,last_level_completed = class="code-string">"5-3"});class=class="code-string">"code-comment">// Increment numeric attributesawait IlaraClient.Instance.IncrementAttribute(class="code-string">"games_played", 1);
Event Tracking
Track Events
csharp
class=class="code-string">"code-comment">// Track custom eventIlaraClient.Instance.TrackEvent(class="code-string">"level_complete", new {level = 5,score = 1500,time_seconds = 120,stars_earned = 3});class=class="code-string">"code-comment">// Track purchaseIlaraClient.Instance.TrackPurchase(productId: class="code-string">"gem_pack_100",amount: 4.99m,currency: class="code-string">"USD");class=class="code-string">"code-comment">// Track with session IDIlaraClient.Instance.TrackEvent(class="code-string">"boss_defeated", new {boss_name = class="code-string">"Dragon King",attempts = 3}, sessionId: class="code-string">"session_abc123");class=class="code-string">"code-comment">// Force flush pending eventsawait IlaraClient.Instance.FlushEvents();
Feature Flags
Check Flags
csharp
class=class="code-string">"code-comment">// Check boolean flagif (IlaraClient.Instance.IsFlagEnabled(class="code-string">"new_tutorial")){ShowNewTutorial();}class=class="code-string">"code-comment">// Get typed flag value with defaultint maxLevel = IlaraClient.Instance.GetFlag(class="code-string">"max_level", 10);string welcomeMsg = IlaraClient.Instance.GetFlag(class="code-string">"welcome_message", class="code-string">"Hello!");float xpMultiplier = IlaraClient.Instance.GetFlag(class="code-string">"xp_multiplier", 1.0f);class=class="code-string">"code-comment">// Evaluate multivariate flagvar result = await IlaraClient.Instance.EvaluateFlag(class="code-string">"checkout_variant");switch (result.VariantKey){case class="code-string">"control":ShowOriginalCheckout();break;case class="code-string">"variant_a":ShowSimplifiedCheckout();break;}class=class="code-string">"code-comment">// Refresh flags from serverawait IlaraClient.Instance.RefreshFlags();
Player Segments
Check Segments
csharp
class=class="code-string">"code-comment">// Check segment membershipbool isWhale = await IlaraClient.Instance.IsInSegment(class="code-string">"whales");if (isWhale){ShowVIPOffer();}class=class="code-string">"code-comment">// Get all segments for playerstring[] segments = await IlaraClient.Instance.GetPlayerSegments();foreach(string segment in segments){Debug.Log($class="code-string">"Player is in segment: {segment}");}
Churn Prediction
Get Churn Risk
csharp
var churnRisk = await IlaraClient.Instance.GetChurnRisk();Debug.Log($class="code-string">"Risk Score: {churnRisk.RiskScore}"); class=class="code-string">"code-comment">// 0.0 - 1.0Debug.Log($class="code-string">"Risk Level: {churnRisk.RiskLevel}"); class=class="code-string">"code-comment">// Low, Medium, HighDebug.Log($class="code-string">"Factors: {string.Join(", class="code-string">", churnRisk.Factors)}");if (churnRisk.IsAtRisk){ShowRetentionOffer();}
Offline Support
The SDK automatically queues events when offline and sends them when connectivity is restored.
Configure Offline Queue
csharp
class=class="code-string">"code-comment">// Enable in configconfig.enableOfflineQueue = true;config.maxOfflineQueueSize = 1000; class=class="code-string">"code-comment">// Max events to queue
API Reference
Best Practices
- Initialize early: Call
Initialize()in your first scene'sAwake()orStart() - Identify players: Always call
IdentifyPlayer()before tracking events - Use typed flags: Use
GetFlag<T>()with appropriate types - Batch events: Let the SDK batch events for efficiency
- Handle errors: Wrap async calls in try-catch for robustness