使用 Kii Game Cloud 开发游戏
本文重点介绍后端组件,并为开发者提供快速构建可扩展的 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 集成到玩家管理、自定义数据甚至分析,您可以比以往更快地为您的游戏添加出色的新功能。