WP8:在Unity中使用OpenXLive
源地址:http://www.cnblogs.com/zhxilin/p/3311240.html
Unity 4.2正式版开始添加了对Windows 8、Windows Phone 8等其他平台的支持,而且开发者可以免费使用Unity引擎来开发游戏了。而作为Windows Phone和Windows 8平台上最大的游戏社交网络,OpenXLive也可以无缝支持Unity for WP8和Windows 8的开发。
本篇文章将介绍如何在Unity for WP8中调用OpenXLive的各种服务。
安装Unity 4.2正式版
Unity 4.2正式版下载地址为:http://unity3d.com/unity/download/
安装OpenXLive SDK
OpenXLive SDK最新版本的下载地址为:http://developer.openxlive.net
在Unity工程中使用OpenXLive
打开Unity 4.2,创建一个新的工程:
我们为摄像机添加一个简单的C#脚本,在Project窗口的Assets文件下右键,选择Create->C# Script:
创建完成后双击改脚本文件,会自动打开MonoDevelop或者Visual Studio,具体的切换方式在Edit->Preferences…->External Tools中进行设置。
打开后可以看到默认的代码:
将上述代码全部删除,添加一个OnGUI方法,在其中绘制几个按钮:
1 void OnGUI() 2 { 3 if (GUILayout.Button("Game Center", GUILayout.Width(300), GUILayout.Height(40))) 4 { 5 } 6 7 if (GUILayout.Button("Submit Score", GUILayout.Width(300), GUILayout.Height(40))) 8 { 9 } 10 }
在Unity的开发文档中,可以参考这篇文章《Interaction between Unity and Windows Phone step by step guide》 :
http://docs.unity3d.com/Documentation/Manual/wp8-unity-interaction.html
介绍了如何在Unity和Windows Phone之间进行数据交互,我们同样在C#脚本文件中,添加一些返回事件,使得这些事件在Windows Phone中被触发,就可以在其中进行任何OpenXLive操作,包括显示游戏中心、提交分数、获取成就、社交互动等等。
首先在C#脚本顶部添加对System的引用:
1 using System;
然后添加以下事件:
1 public event EventHandler GameCenterButtonPressed; 2 public event EventHandler SubmitScoreButtonPressed;
在按钮被按下时分别返回这些事件:
1 void OnGUI() 2 { 3 if (GUILayout.Button("Game Center", GUILayout.Width(300), GUILayout.Height(40))) 4 { 5 if (GameCenterButtonPressed != null) 6 { 7 GameCenterButtonPressed(this, EventArgs.Empty); 8 } 9 } 10 11 if (GUILayout.Button("Submit Score", GUILayout.Width(300), GUILayout.Height(40))) 12 { 13 if (SubmitScoreButtonPressed != null) 14 { 15 SubmitScoreButtonPressed(this, EventArgs.Empty); 16 } 17 } 18 } 19
接下来返回Unity,把这个C#脚本应用到摄像机上,直接拖拽该文件到摄像机上即可;或者点击摄像机,在Inspector窗口中,点击Add Component按钮,添加一个MyScript:
之后将此场景保存为DemoScene,到这里在Unity中的编辑就完成了。接下来将Unity工程导出为WP8的工程:
打开导出的WP8工程,在引用节点添加对OpenXLive的引用:
打开App.xaml.cs,在构造函数中,启动OpenXLive会话并对UI进行初始化:
1 GameSession session = XLiveGameManager.CreateSession(APISecretKey); 2 XLiveUIManager.Initialize(this, session); 3 session.CreateSessionCompleted += session_CreateSessionCompleted; 4 session.Open(); 5 6 void session_CreateSessionCompleted(object sender, AsyncEventArgs e) 7 { 8 if (e.Result.ReturnValue) 9 { 10 } 11 }
接下来打开MainPage.xaml.cs,在Unity_Loaded方法中,取出Unity的C#脚本对象:
1 private void Unity_Loaded() 2 { 3 MyScript script = (MyScript)UnityEngine.Object.FindObjectOfType(typeof(MyScript)); 4 script.GameCenterButtonPressed += script_GameCenterButtonPressed; 5 script.SubmitScoreButtonPressed += script_SubmitScoreButtonPressed; 6 }
注意注册事件必须且只能在UI线程中进行操作,如:
1 void script_GameCenterButtonPressed(object sender, EventArgs e) 2 { 3 this.Dispatcher.BeginInvoke(delegate 4 { 5 XLiveUIManager.ShowGameCenter(); 6 }); 7 } 8 9 void script_SubmitScoreButtonPressed(object sender, EventArgs e) 10 { 11 this.Dispatcher.BeginInvoke(delegate 12 { 13 var lbp = XLiveGameManager.CurrentSession.LeaderboardProfiles[0]; 14 Leaderboard lb = new Leaderboard(XLiveGameManager.CurrentSession, lbp); 15 lb.SubmitScoreCompleted += lb_SubmitScoreCompleted; 16 lb.SubmitScore(10); 17 }); 18 }
这样就可以在Unity的游戏逻辑中调用OpenXLive的相关功能了,特别是提交分数、获取成就等功能。更多OpenXLive相关功能,请查看OpenXLive SDK帮助文档,或访问开发者网站获取。
参考资料
OpenXLive Website
OpenXLive Developer Website
http://developer.openxlive.com/
Getting Started with Open XLive
http://wiki.openxlive.com/Getting-Started-with-Open-XLive.ashx