Quick Start Guide

Get started with the CMS in minutes.

M8 CMS SDK - Quick Start Guide

5-Minute Setup

Step 1: Add to Your Scene (1 minute)

  1. Open your Unity project
  2. Drag M8CMS_SDK_Prefab.prefab into your scene
  3. Done! The SDK auto-initializes

Step 2: Get Your Code Ready (2 minutes)

C#
using UnityEngine;
using M8CMS;

public class MyGameScript : MonoBehaviour
{
    private M8CMSManager cmsManager;
    
    void Start()
    {
        // Access the SDK
        cmsManager = M8CMSManager.Instance;
        
        // Listen for data ready
        M8CMSManager.OnGameDataLoaded += OnDataLoaded;
    }
    
    void OnDataLoaded(GameData gameData)
    {
        Debug.Log($"Loaded {gameData.levels.Count} levels!");
        
        // Your game data is ready to use
        foreach (var level in gameData.levels)
        {
            Debug.Log($"Level {level.index}: {level.levelType}");
        }
    }
    
    async void LoadLevelImage(int levelIndex)
    {
        // Download and get level image
        var sprite = await cmsManager.GetLevelSpriteAsync(levelIndex);
        myImageUI.sprite = sprite;
    }
    
    void OnDestroy()
    {
        M8CMSManager.OnGameDataLoaded -= OnDataLoaded;
    }
}

Step 3: Use Level Data (1 minute)

C#
// Get level information
Level level = cmsManager.GetLevelByIndex(5);

// Load level image
async void ShowLevelPreview(int levelIndex)
{
    var sprite = await cmsManager.GetLevelSpriteAsync(levelIndex);
    levelImage.sprite = sprite;
}

// Load level video
async void PlayLevelVideo(int levelIndex)
{
    var video = await cmsManager.GetLevelVideoAsync(levelIndex);
    // Use video bytes with Unity's VideoPlayer
}

Step 4: Track Player Progress (1 minute)

C#
// When player starts a level, notify the SDK
public void StartLevel(int levelIndex)
{
    cmsManager.ConsumeLevelContent(levelIndex);
    
    // This triggers auto-download of upcoming levels
    // based on your settings
}

Common Use Cases

Use Case 1: Level Select Screen

C#
void Start()
{
    cmsManager = M8CMSManager.Instance;
    CreateLevelButtons();
}

void CreateLevelButtons()
{
    var levels = cmsManager.GetAllLevels();
    
    foreach (var level in levels)
    {
        var button = CreateButton(level.index);
        StartCoroutine(LoadThumbnail(button, level));
    }
}

IEnumerator LoadThumbnail(Button button, Level level)
{
    var task = cmsManager.GetLevelSpriteAsync(level.index);
    yield return new WaitUntil(() => task.IsCompleted);
    
    button.image.sprite = task.Result;
}

Use Case 2: In-Game Content

C#
// When player reaches level
void OnLevelStart(int levelIndex)
{
    // Let SDK know player is here
    cmsManager.ConsumeLevelContent(levelIndex);
    
    // Get level data
    Level level = cmsManager.GetLevelByIndex(levelIndex);
    
    // Setup level
    SetupGrid(level.gridSize);
    SetReward(level.rewardCoin);
    
    // Load level image if needed
    StartCoroutine(LoadLevelContent(levelIndex));
}

Use Case 3: Collection Gallery

C#
void DisplayCollections()
{
    var collections = cmsManager.GetAllCollections();
    
    foreach (var collection in collections)
    {
        CreateGalleryItem(collection);
    }
}

async void CreateGalleryItem(CollectionItem collection)
{
    var sprite = await cmsManager.GetCollectionSpriteAsync(collection.index);
    var item = Instantiate(prefab);
    item.GetComponent<Image>().sprite = sprite;
    item.GetComponentInChildren<Text>().text = collection.name;
}

Configuration Checklist

  • Add M8CMS_SDK_Prefab to your scene
  • Set your appKey in the Inspector
  • Configure downloadImagesVideosOnStart (0-5 recommended)
  • Configure downloadNewLevelsBeforeXLevel (1-3 recommended)
  • Set maxCacheSize according to your game (40MB default)
  • Enable or disable built-in content as needed

Essential API Reference

Get Level Data

C#
Level level = cmsManager.GetLevelByIndex(5);

Load Image

C#
var sprite = await cmsManager.GetLevelSpriteAsync(levelIndex);

Load Video

C#
var video = await cmsManager.GetLevelVideoAsync(levelIndex);

Track Progress

C#
cmsManager.ConsumeLevelContent(levelIndex);

Check Content Status

C#
bool ready = cmsManager.IsLevelContentReady(levelIndex);

Get All Levels

C#
var levels = cmsManager.GetAllLevels();

Get All Collections

C#
var collections = cmsManager.GetAllCollections();

Tips & Best Practices

  1. Always subscribe to events to know when data is ready
  2. Use ConsumeLevelContent() to trigger auto-downloads
  3. Handle async operations with coroutines or await
  4. Check content availability before displaying
  5. Let the SDK handle caching - don't duplicate cache logic
  6. Use version management for A/B testing content
  7. Enable debug logs during development

Need More Details?

See SDK_DOCUMENTATION.md for complete API reference.