伴随着Unity蒸蒸日上的前进势头,以及向来冷艳傲娇格调高的暴雪都采用Unity3D来制作魔兽嫡系卡牌游戏炉石传说,如此看,Unity在3D市场上是得到了业界“九袋长老”的认可的,既然Unity表现的如此高大上,那么同样与时俱进的AVOS Cloud 怎会不与Unity共舞一曲《天仙配》呢?
2014年5月,AVOS Cloud 已经正式发布了AVOS Cloud Unity SDK,相关下载以及文档请用力猛戳:AVOS Cloud Unity指南。
当然本文的主题依然是帮助
正在寻找后端解决方案,或者要为现有Unity的游戏添加后端服务模块的开发者们
解决你们一切的后端之忧。
2014年年初,一款神奇的游戏「Flappy Bird」震惊了手游届,这款游戏最大的特点就是——让广大普通青年和特殊青年发现了自己的手残倾向。
假如现在用Unity重写了一版「Flappy Bird」,我想实现比原版多几个功能:
这样的话,游戏开发者可以有效的根据统计信息随时跟进用户的刚性需求,因为只要使用了AVOS Cloud的服务,所有的统计数据都可以在我们的站点进行查询,并且我们已经推出了面向开发者的AVOS Cloud统计分析移动客户端已经上线,不出家门,不开电脑,拿出手机,查看自己的游戏的统计信息,是不是听起来就很带感呢?
很庆幸,我们不需要重头开始书写「Flappy Bird」的Unity版的源代码,在GitHub上随便搜就能看见很多可以直接编译运行的。比如笔者随便找了一位来自开挂国家印度的程序员写的一版:coppra/flappy_bird(虽未经授权,不过笔者貌似也没有违反相关授权)
这个版本代码很简洁,很适合做范例,请注意:本文不是来班门弄斧教各位Unity大神如何实现游戏的各种功能和需求,本文旨在帮助Unity的大神从数据服务中解脱出来,把更多的激情释放在如何使用Unity做出更加酷炫的游戏页面
接下来,如何使用AVOS Cloud 轻松搞定以上5项需求呢?
诸位看官先把刚才提到的coppra/flappy_bird这个项目的代码下载下来。
- 打开
flappy_bird-master\flappy_bird-master\Assets\Scenes目录下的one.unity(当然,在进行教程之前必须先安装Unity)。- 然后按照AVOS Cloud Unity 快速入门逐步导入Unity SDK。(这一步很重要后面的教程都与之相关)
- 确保AppID以及AppKey已填写正确。
很高兴的告诉您,只要您在我们的站点上设置了打开数据统计这一项功能,游戏在被打开的时候就已经被记录,并且会按照设定的 策略 进行发送到服务端,所以第一项功能已经在SDK的层级帮您完成了,怎么样,是不是很性感?(人生苦短,必须性感)
Assets/Scripts/GameManager.cs ,双击在编译器中打开,笔者用的是微软的Visaul Studio 2013作为Unity辅助开发工具。Update 方法中使其代码如下:void Update()
{
if (!gameStart)
{
if (Input.GetMouseButtonDown(0))
{
AVAnalytics.StartEvent("OneGame", new Dictionary<string, object>
{
{"startSilgelGameTime",DateTime.UtcNow.ToString()}
});//记录玩家点击屏幕游戏开始的时间。
gameStart = true;
}
}
if (gameStart)
if (Input.GetKeyUp(KeyCode.Escape))
{
Application.Quit();
}
}
bird.cs 中,添加结束 OneGame 这个自定义事件的方法:void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.tag == "scoreMaker")
{
GameManager.score += 1;
Destroy(other.gameObject);
}
else
{
AVAnalytics.StopEvent("OneGame");//本局结束,只要调用一下事件终止方法,SDK会自动计算开始到结束之间的间隔发送到服务端。
gameObject.collider2D.isTrigger = false;
AudioSource.PlayClipAtPoint(hit, Camera.main.transform.position);
if (GameManager.score > PlayerPrefs.GetInt("highscore"))
{
guiManager.medal = true;
}
GameManager.gameOver = true;
}
}
以上添加的2条语句,就完成了一个客户端自定事件记录,如此做,在我们的站点后台就能查看到这个事件的统计数据。
同样还是在 bird.cs 下,在32行的 Update() 的方法内部,添加如下一行代码足矣:
if ((Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0)) && !GameManager.gameOver && GameManager.gameStart)
{
AVAnalytics.TrackEvent("Tap");//记录用户点击,无需其他参数
rigidbody2D.velocity = new Vector2(0f, upForce);
}
切回 GameManager.cs ,为它添加一个静态属性,用来记录一次会话中,玩家总共玩过的局数。
public static int totalGames = 0;
然后将 Update() 方法改为如下:
void Update()
{
if (!gameStart)
{
if (Input.GetMouseButtonDown(0))
{
AVAnalytics.StartEvent("OneGame", new Dictionary<string, object>
{
{"startSilgelGameTime",DateTime.UtcNow.ToString()}
});//记录玩家点击屏幕游戏开始的时间。
gameStart = true;
totalGames++;
}
}
if (gameStart)
if (Input.GetKeyUp(KeyCode.Escape))
{
AVAnalytics.TrackEvent("QuitGame", new Dictionary<string, object>
{
{"totalGames",totalGames}
});
Application.Quit();
}
}
也只是多了2条语句就完成了这一个功能。
这个可能是所有游戏最核心的一部分了,在如今社交碎片化的年代,你打个飞机都得让好友知道你打得多么高的分数,把分数记录在一个稳定的,可靠的,存取速度快的的服务端,是多么重要的一件事情,那么这个功能就得用到AVOS Cloud最基本的数据存储功能。
打开 bird.cs ,在 OnTriggerEnter2D 中继续添加代码,在发生小鸟撞击水管的语句块中添加如下代码:
#region 把这次的分数记录到AVOS Cloud的服务端
AVObject gameScore = new AVObject("GameScore");//创建一个GameScore对象
gameScore["score"] = GameManager.score;//将分数记录下来
gameScore["playerName"] = "DemoUser";//标记一下用户,这里写死只做示意
gameScore["deviceID"] = SystemInfo.deviceUniqueIdentifier;//顺便利用Unity的API
gameScore.SaveAsync();
#endregion
使 OnTriggerEnter2D 整体变成如下:
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.tag == "scoreMaker")
{
GameManager.score += 1;
Destroy(other.gameObject);
}
else
{
AVAnalytics.StopEvent("OneGame");//本局结束,只要调用一下事件终止方法,SDK会自动计算开始到结束之间的间隔发送到服务端。
#region 把这次的分数记录到AVOS Cloud的服务端
AVObject gameScore = new AVObject("GameScore");
gameScore["score"] = GameManager.score;
gameScore["playerName"] = "DemoUser";
gameScore["deviceID"] = SystemInfo.deviceUniqueIdentifier;
gameScore.SaveAsync();
#endregion
gameObject.collider2D.isTrigger = false;
AudioSource.PlayClipAtPoint(hit, Camera.main.transform.position);
if (GameManager.score > PlayerPrefs.GetInt("highscore"))
{
guiManager.medal = true;
}
GameManager.gameOver = true;
}
}
通过以上这些添加的代码,总共不超过20行,就实现了这些数据从本地到服务端的存取。
AVOS Cloud一直致力于提高开发体验,提供稳定,快速,轻而足量的云服务。Unity 是我们比较看重的一块市场,在3D以及跨平台双重优势下,Unity必将能挑战游戏引擎在Mobile市场霸主地位。