Unity 登录ios GameCenter方法分享
发表于2017-02-16
想通过Unity 登录ios GameCenter,需要借助unity自带的Social.localUser方法调用来实现,鉴于有些开发者没有过这方面的经验,下面就给大家介绍下成功登陆进ios GameCenter的方法,想看的可以学习一下。
下面是代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | using UnityEngine; using UnityEngine.SocialPlatforms; using UnityEngine.SocialPlatforms.GameCenter; public class GameCenterManager : System.Object { private static GameCenterManager instance; private static object _lock= new object (); private GameCenterManager(){} public static GameCenterManager GetInstance() { if (instance== null ) { lock (_lock) { if (instance== null ) { instance= new GameCenterManager(); } } } return instance; } public void Start() { Social.localUser.Authenticate(HandleAuthenticated); } private void HandleAuthenticated( bool success) { Debug.Log( "*** HandleAuthenticated: success = " + success); if (success) { string userInfo = "UserName:" + Social.localUser.userName + "nUser ID:" + Social.localUser.id + " nIsUnderage: " + Social.localUser.underage; Debug.Log(userInfo); //下面三行看个人需要,需要什么信息就取什么信息,这里注释掉是因为担心有的朋友没有在iTunesConnect里设置排行、成就之类的东西,运行起来可能会报错 // Social.localUser.LoadFriends(HandleFriendsLoaded); // Social.LoadAchievements(HandleAchievementsLoaded); // Social.LoadAchievementDescriptions(HandleAchievementDescriptionsLoaded); } } private void HandleFriendsLoaded( bool success) { Debug.Log( "*** HandleFriendsLoaded: success = " + success); foreach (IUserProfile friend in Social.localUser.friends) { Debug.Log( "* friend = " + friend.ToString()); } } private void HandleAchievementsLoaded(IAchievement[] achievements) { Debug.Log( "* HandleAchievementsLoaded" ); foreach (IAchievement achievement in achievements) { Debug.Log( "* achievement = " + achievement.ToString()); } } private void HandleAchievementDescriptionsLoaded(IAchievementDescription[] achievementDescriptions) { Debug.Log( "*** HandleAchievementDescriptionsLoaded" ); foreach (IAchievementDescription achievementDescription in achievementDescriptions) { Debug.Log( "* achievementDescription = " + achievementDescription.ToString()); } } // achievements public void ReportProgress( string achievementId, double progress) { if (Social.localUser.authenticated) { Social.ReportProgress(achievementId, progress, HandleProgressReported); } } private void HandleProgressReported( bool success) { Debug.Log( "*** HandleProgressReported: success = " + success); } public void ShowAchievements() { if (Social.localUser.authenticated) { Social.ShowAchievementsUI(); } } // leaderboard public void ReportScore( string leaderboardId, long score) { if (Social.localUser.authenticated) { Social.ReportScore(score, leaderboardId, HandleScoreReported); } } public void HandleScoreReported( bool success) { Debug.Log( "*** HandleScoreReported: success = " + success); } public void ShowLeaderboard() { if (Social.localUser.authenticated) { Social.ShowLeaderboardUI(); } } |
当然在登陆过程中也出现过一些列问题,例如说在ios设备上没有反映,刚开始感觉这个脚本出问题。然后使用第三方插件,也是不能登录, 查看源码,打印错误日志。
最后才发现必须开启gameCenter的沙盒模式 Sandbox in Settings--> Game Center --> Sandbox. 错误提示为:Domain=GKErrorDomain Code=15 "The requested operation could not be completed because this application is not recognized by Game Center." UserInfo=0x17d08ee0 {NSLocalizedDescription=The requested operation could not be completed because this application is not recognized by Game Center.
相信有了这前车之鉴,大家的开发过程会变的顺畅很多。