65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Kii Game Cloud 开发游戏

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2014 年 2 月 12 日

CPOL

6分钟阅读

viewsIcon

16554

本文重点介绍后端组件,并为开发者提供快速构建可扩展的 Kii 游戏云游戏的信息。

学习构建 Unity 游戏和 Kii,赢得 10,000 美元和你的新游戏的全球发行权!

移动游戏是快速增长的市场之一。根据行业分析师的预测,到 2017 年,移动和在线游戏市场的年复合增长率可能达到 23%,收入达到 600 亿美元。

这意味着游戏开发者拥有巨大的机遇。然而,只有一小部分游戏能够真正取得成功。根据我们与许多游戏开发者合作的经验,我们发现几乎所有成功的游戏都具有一些共同的要素:它们以一个绝妙的想法开始,拥有出色的用户体验,并且拥有可扩展的后端来支持任何增长高峰和持续的性能需求。它们还创造了一个强大的用户获取机制。最后,成功的游戏会收集玩家行为和使用情况的信息,并根据这些见解进行智能变现。

Kii 提供开箱即用的完整游戏云——包括后端工具、洞察和分发包,以帮助开发者积极地分发他们的游戏。

本文重点介绍后端组件,并为开发者提供快速构建可扩展的 Kii 游戏云游戏的信息。

入门

开始很容易,免费注册请访问 developer.kii.com。要创建你的第一个应用并集成 Kii SDK,请按照此处的简单说明进行操作。

本页面用作快速参考,许多代码片段均基于我们完整的 Unity + Kii 开源教程 UnityAngryBotsKii(基于 AngryBots 演示),可在我们的Github 项目页面上找到。

注意:如果您想深入了解,我们随时提供完整指南参考文档

玩家管理

能够管理用户(例如,允许他们注册和登录)对于跟踪分数、关卡进度以及跨设备或平台访问用户信息至关重要。幸运的是,使用 Kii SDK 可以非常轻松地完成此过程,只需几行代码即可实现。

注册用户

要创建用户,请查看以下代码片段

KiiUser.Builder builder = KiiUser.BuilderWithName(username);
builder.WithEmail(email);
KiiUser usr = builder.Build(); 
usr.Register(password, (KiiUser user, Exception e) => 
{ 
    if (e != null) 
    { 
        // process error
        Debug.LogError("Signup failed: " + e.ToString());  
    } 
    else 
    { 
        // do something with user, it's a valid user now 
        Debug.Log("Signup succeeded"); 
    } 
});

验证用户

同样,要登录用户

KiiUser.LogIn(username,password, (KiiUser user, Exception e) => 
{ 
    if (e != null) 
    { 
        // process error
        Debug.LogError("Login failed: " + e.ToString());
    } 
    else 
    { 
        // do something with user, it's a valid user now
        Debug.Log("Login succeeded");  
    } 
});

Facebook 社交登录

您可以使用 Facebook 来引导用户进入您的 Kii 游戏。为此,您需要将 Facebook Unity SDK 添加到您的游戏中,然后在用户认证后检索 Facebook 令牌。使用该令牌,您可以将用户引导到 Kii Cloud 并获得一个有效的 Kii 用户。

KiiUser user = null; try
{
    user = KiiUser.LoginWithFacebookToken(facebookToken);
} 
catch(Exception e) 
{ 
   Debug.Log(e.StackTrace); 
} 

// Now you have a logged in Kii 
user via Facebook ( -> KiiUser.CurrentUser) 

// And you can update the user attributes from Facebook data 
KiiUser.ChangeEmail(facebookEmail); 
KiiUser.ChangePhone(facebookPhone); 
user.Displayname = facebookName; 
user.Update(); Debug.Log("Current user email is: " + KiiUser.CurrentUser.Email); 
Debug.Log("Current user name is: " + KiiUser.CurrentUser.Displayname); 
Debug.Log("Current user phone is: " + KiiUser.CurrentUser.Phone);

在使用此方法之前,必须在开发者控制台的应用设置中输入 Facebook 应用 ID,具体说明请参阅此处的第 1、2 和 3 步。

存储游戏数据

Kii SDK 为您提供了一个非常灵活的、完全无模式的基于 JSON 的数据存储。任何键值对都可以存储、嵌套并附加到用户或其他对象,让您可以存储在游戏中创建或使用的所有数据。

这种存储方式非常适合跟踪**用户进度**、创建**排行榜**或远程存储和修改**游戏配置**。

在以下示例中,我们将创建一个分数上传到排行榜

public void sendScore(int score) 
{ 
    KiiUser user = KiiUser.CurrentUser; KiiBucket bucket = Kii.Bucket("scores");
    KiiObject kiiObj = bucket.NewKiiObject(); 
    kiiObj["score"] = score; kiiObj["username"] = user.Username;
    kiiObj.Save((KiiObject obj, Exception e) => 
    { 
        if (e != null) 
        { 
            Debug.LogError("Failed to save score" + e.ToString()); 
        } 
        else 
        { 
            Debug.Log("Score sent"); 
        } 
    });
}

检索游戏数据

当然,一旦数据存储完毕——您需要一种方法来获取它并以有意义的方式使用它!查询数据非常简单,您甚至可以创建参数来构建类似 SQL 的查询来检索数据。

查看这个例子,我们查询前 10 名的分数以在我们的排行榜中显示

KiiBucket 
bucket = Kii.Bucket("scores"); 
KiiQuery query = new KiiQuery(); 
query.SortByDesc("score"); 
query.Limit = 10; bucket.Query(query, (KiiQueryResult<KiiObject> list, Exception e) => 
{
    if (e != null) 
    { 
        Debug.LogError("Failed to query " + e.ToString()); 
    }
    else 
    { 
        Debug.Log("Query succeeded"); 
        int i = 0; foreach (KiiObject obj in list) 
        {
            int score = obj.GetInt("score"); 
            string username = obj.GetString("username"); 
            DisplayScoreLine(i++, username, score);
        } 
  } });

地理定位

为您的游戏添加新的维度可以带来更多的定制化,甚至为您的游戏带来个性化的感觉。Kii 允许您将地理位置坐标附加到任何存储在云中的对象,从而有机会在您的游戏中利用地理位置。

在这种情况下,我们将坐标附加到分数对象。这将允许我们查看用户区域内(例如 100 公里)的最高得分者。

存储地理坐标

这是如何将坐标附加到分数对象的方法

public void sendScore(int score)
{ 
    KiiGeoPoint userLocation = new KiiGeoPoint(GetLatitude(),GetLongitude()); 
    KiiUser user = KiiUser.CurrentUser; 
    KiiBucket bucket = Kii.Bucket("scores"); 
    KiiObject kiiObj = bucket.NewKiiObject(); 
    kiiObj["score"] = score; 
    kiiObj["username"] = user.Username; 
    kiiObj.SetGeoPoint("location", userLocation); 
    kiiObj.Save((KiiObject obj, Exception e) => 
    { 
        if (e != null) 
        {
            Debug.LogError("Failed to save score" + e.ToString()); 
        }
        else 
        { 
            Debug.Log("Score sent"); 
        } 
    });
}

查询附近对象

要搜索给定位置 100 公里范围内的分数,您可以执行一个类似以下的查询

KiiBucket bucket = Kii.Bucket("scores"); 
string distanceField = "distance_from_center"; 
KiiGeoPoint center = new KiiGeoPoint(GetLatitude(), GetLongitude()); 

// Create a query instance and set the sorting order (closer first)
KiiClause clause = KiiClause.GeoDistance("location", center, 100000, distanceField); 
KiiQuery query = new KiiQuery(clause); string sortKey = "_calculated." + distanceField; 

// Execute GeoDistance
query.SortByAsc(sortKey);
query bucket.Query(query, (KiiQueryResult<KiiObject> list, Exception e) => 
{ 
    if (e != null) 
    {
        Debug.LogError("Failed to query " + e.ToString());
    } 
    else 
    { 
        Debug.Log("Query succeeded"); 
        int i = 0; 
        foreach (KiiObject obj in list) 
        { 
            int score = obj.GetInt("score"); 
            string username = obj.GetString("username"); 
            DisplayScoreLine(i++, username, score); 
        } 
    } 
});

访问控制

能够控制谁可以读取/写入游戏中的某些数据对于每个应用程序都至关重要。Kii 提供易于使用的工具来实现这一点,从默认范围到授予存储桶的权限,再到单个对象的完整 ACL(访问控制列表)。您可以始终确信您的游戏创建的数据只能由适当的用户访问。

尽管开箱即用地设置了许多默认权限,但这里有一个快速示例,用于更改单个对象的 ACL

Uri objUri = new Uri("a_public_game_object"); 
KiiObject obj = KiiObject.CreateByUri(objUri); 
// Allow anonymous users to read the object 
try 
{ 
    obj.Acl(ObjectAction.READ_EXISTING_OBJECT).Subject(
        KiiAnonymousUser.Get()).Save(ACLOperation.GRANT);
} 
catch (Exception e) 
{ 
    // handle error.
}

自定义分析

对于希望在应用商店竞争的游戏开发者来说,了解游戏的方方面面至关重要。用户玩特定关卡的时间有多长?有些关卡是否太难?他们购买最多的商品是什么?回答这些问题不仅有助于改进您的游戏,还能帮助您更好地变现您的游戏。

这些类型的问题会因游戏而异,因此您需要能够按照自己的方式进行跟踪。Kii 提供两种不同类型的分析,这两种分析都完全可根据您的游戏进行自定义,而不是被迫使用提供商定义的模板分析。

事件分析

事件分析在很大程度上符合传统分析的概念。某个关卡被玩了多少次?用户有多少次处于多人模式?您可以跟踪所有用户的单个事件来回答这些类型的问题。

要跟踪这些类型的事件,您可以使用简单的代码片段,如下所示

// Send Analytics event for end of level time 
public static void EndOfLevel(float gameTime, int level) 
{ 
    KiiEvent ev = KiiAnalytics.NewEvent("end_of_level"); 
    // Set key-value pairs 
    ev ["user"] = user.Username; 
    ev ["time"] = gameTime; 
    
    // Upload Event Data to Kii Cloud
    ev ["level"] = level;  
    try 
    { 
        KiiAnalytics.Upload(ev); 
    } 
    catch (Exception e)
    { 
        Debug.LogError("Unable to upload analytics event to Kii Cloud: " + e.ToString()); 
    } 
}

注意:这要求您在代码中内置并部署此事件跟踪的游戏。如果您需要在启动后开始跟踪新指标,该怎么办?请参阅下面的游戏数据分析!

后续步骤

如果您还没有这样做,请前往 developer.kii.com 注册一个免费的 Kii 游戏云帐户。几分钟之内,您就可以拥有一个云连接的游戏并开始运行了!

为了帮助您入门,我们提供了一些 Unity 演示,以便您熟悉我们的 Unity SDK

  • KiiUnitySDKSamples - 一个通用的 Unity 演示,通过 Unity SDK 系统地展示了所有 Kii Cloud API 调用。它没有附加到任何游戏,但它是一个无需修改即可运行的 Unity 项目,提供了基于 Unity 的 GUI 进行交互。
  • UnityAngryBotsKii - 基于官方 Unity 3D 4.3 AngryBots 演示游戏,该项目通过 Unity SDK 使用 Kii Cloud。该演示正在开发中,但已展示了 Kii 的多项功能。
  • HelloKii-Unity - 一个项目,在简单的 breakout 游戏上下文中展示了基本的用户管理和数据管理(包括查询)。
  • 产品演示,介绍相关功能

Kii 的游戏云提供了您将云连接添加到移动游戏所需的所有工具。从 Unity 集成到玩家管理、自定义数据甚至分析,您可以比以往更快地为您的游戏添加出色的新功能。

© . All rights reserved.