Vision Pro/Unity/Poly Spatial开发笔记整理【八】(接入Game Center)

接入流程

Apple Developer开发流程

应用申请和后台排行榜创建

进行成就和排行榜的添加和删除等操作都在官网有详细解释官方文档

Social API

以下是根据Unity Document : Apple Social API官方文档,列出了Unity Social API的静态变量和函数,以及它们的简要说明:

成员类型描述实例
Active静态变量这是当前活动的社交平台。-
localUser静态变量本地用户(可能未登录)。Social.localUser
CreateAchievement静态函数创建一个 IAchievement 实例。Social.CreateAchievement()
CreateLeaderboard静态函数创建一个 ILeaderboard 实例。Social.CreateLeaderboard()
LoadAchievementDescriptions静态函数加载与此应用程序相关联的成就描述。Social.LoadAchievementDescriptions()
LoadAchievements静态函数加载已登录用户已实现或已报告了进度的成就。Social.LoadAchievements()
LoadScores静态函数从给定的排行榜加载一组默认分数。Social.LoadScores(leaderboardID)
LoadUsers静态函数加载与给定用户ID数组相关联的用户配置文件。Social.LoadUsers(userIDs)
ReportProgress静态函数报告成就的进度。Social.ReportProgress(achievementID, percent)
ReportScore静态函数向特定排行榜报告分数。Social.ReportScore(score, leaderboardID)
ShowAchievementsUI静态函数显示游戏成就的默认/系统视图。Social.ShowAchievementsUI()
ShowLeaderboardUI静态函数显示游戏排行榜的默认/系统视图。Social.ShowLeaderboardUI()

请注意,"实例"列中的代码示例是假设性的,展示了如何调用这些静态函数。在实际使用中,您可能需要根据具体的API文档和您的游戏逻辑来调整这些调用。此外,一些静态变量和函数可能不需要创建实例,因此在这些情况下,“实例”列可能不适用。

这个表格提供了Unity Social API中一些关键组件的概览,展示了它们的类型和基本功能。
在实际的游戏开发中,这些API可以用来实现玩家认证、成就系统、排行榜等功能,并与玩家的社交网络进行交互。

基础功能

ILocalUser接口类型

IUserProfile 接口的成员与 ILocalUser 接口的成员结合,以下是更新后的表格:

成员类型成员名称类型描述
属性userNamestring用户的用户名或别名。
属性idstring用户的全局唯一标识符。
属性isFriendbool用户是否是当前登录用户的好友。
属性stateUserState用户的在线状态。
属性imageTexture2D用户的头像图像。
方法Authenticatevoid认证本地用户的方法。
方法LoadFriendsvoid加载本地用户的朋友列表的方法。
属性friendsIUserProfile[]获取本地用户的朋友列表。
属性authenticatedbool标识本地用户是否已经通过认证。
属性underagebool标识本地用户是否未成年。

这个表格列出了 ILocalUser 接口从 IUserProfile 接口继承的属性以及它自己的特有成员。IUserProfile 接口定义了用户的基本资料信息,而 ILocalUser 接口则添加了本地用户特有的认证和社交功能。UserState 是一个枚举类型,表示用户的在线状态。这些接口提供了Unity游戏服务中用户认证和社交网络集成的基础。

Social.localUser函数

这段代码用于处理玩家的认证,并在认证成功后打印出玩家的用户名、用户ID和是否未成年的状态信息。

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    void Start()
    {
        Social.localUser.Authenticate(success => {
            if (success)
            {
                Debug.Log("Authentication successful");
                string userInfo = "Username: " + Social.localUser.userName +
                    "\nUser ID: " + Social.localUser.id +
                    "\nIsUnderage: " + Social.localUser.underage;
                Debug.Log(userInfo);
            }
            else
                Debug.Log("Authentication failed");
        });
    }
}

成就系统

成员类型描述实例
CreateAchievement静态函数创建一个 IAchievement 实例。Social.CreateAchievement()
LoadAchievementDescriptions静态函数加载与此应用程序相关联的成就描述。Social.LoadAchievementDescriptions()
LoadAchievements静态函数加载已登录用户已实现或已报告了进度的成就。Social.LoadAchievements()
ReportProgress静态函数报告成就的进度。Social.ReportProgress(achievementID, percent)
ShowAchievementsUI静态函数显示游戏成就的默认/系统视图。Social.ShowAchievementsUI()

IAchievement接口类型

以下是根据IAchievement的代码,列出的成员、类型和描述的表格:

成员名称类型描述
ReportProgress方法(Action)用于报告成就进度,回调函数接收一个布尔值表示操作成功或失败。
idstring成就的唯一标识符。
percentCompleteddouble完成进度,范围从0.0到100.0。
completedbool当percentCompleted达到100.0时为true。
hiddenbool如果为true,则此成就对用户不可见。
lastReportedDateDateTime当percentCompleted更新时,由服务器设置的最后报告日期。

Social.CreateAchievement函数

这段代码演示了如何在Unity中使用Social API创建一个成就(IAchievement),设置其ID和完成度为100%,然后异步报告成就进度:

using UnityEngine;
using UnityEngine.SocialPlatforms;

public class ExampleClass : MonoBehaviour
{
    void Example()
    {
        IAchievement achievement = Social.CreateAchievement();
        achievement.id = "Achievement01";
        achievement.percentCompleted = 100.0;
        achievement.ReportProgress(result => {
            if (result)
                Debug.Log("Successfully reported progress");
            else
                Debug.Log("Failed to report progress");
        });
    }
}

IAchievementDescription类型

以下是根据您提供的代码反编译结果制作的表格,列出了 IAchievementDescription 接口的成员、类型和描述:

成员名称类型描述
idstring (get, set)唯一标识符,用于识别这个成就描述。
titlestring (get)人类可读的成就标题。
imageTexture2D (get)成就的图像表示。
achievedDescriptionstring (get)成就完成后的描述。
unachievedDescriptionstring (get)成就未完成时的描述。
hiddenbool (get)如果为隐藏成就,则在完成度为0时不会在列表中显示,直到完成度有所变动。
pointsint (get)这个成就的点值。

IAchievementDescription 接口定义了游戏成就的元数据,包括成就的唯一标识符、标题、图像、达成和未达成状态的描述、是否为隐藏成就以及成就点值。这些信息通常用于在游戏中显示成就列表,让玩家了解每个成就的具体内容和解锁状态。

Social.LoadAchievementDescriptions函数

这段代码使用Unity的Social API在游戏开始时异步加载所有的成就描述,并在打印ID、标题和未达成描述,如果加载成功则显示详细信息,否则输出失败信息。

using UnityEngine;
using UnityEngine.SocialPlatforms;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    void Start()
    {
        Social.LoadAchievementDescriptions(descriptions => {
            if (descriptions.Length > 0)
            {
                Debug.Log("Got " + descriptions.Length + " achievement descriptions");
                string achievementDescriptions = "Achievement Descriptions:\n";
                foreach (IAchievementDescription ad in descriptions)
                {
                    achievementDescriptions += "\t" +
                        ad.id + " " +
                        ad.title + " " +
                        ad.unachievedDescription + "\n";
                }
                Debug.Log(achievementDescriptions);
            }
            else
                Debug.Log("Failed to load achievement descriptions");
        });
    }
}

Social.LoadAchievements函数

这段代码在游戏开始时加载成就信息,并在控制台输出每个成就的详细信息。

using UnityEngine;
using UnityEngine.SocialPlatforms;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    void Start()
    {
        Social.LoadAchievements(achievements => {
            if (achievements.Length > 0)
            {
                Debug.Log("Got " + achievements.Length + " achievement instances");
                string myAchievements = "My achievements:\n";
                foreach (IAchievement achievement in achievements)
                {
                    myAchievements += "\t" +
                        achievement.id + " " +
                        achievement.percentCompleted + " " +
                        achievement.completed + " " +
                        achievement.lastReportedDate + "\n";
                }
                Debug.Log(myAchievements);
            }
            else
                Debug.Log("No achievements returned");
        });
    }
}

Social.ReportProgress函数

这段代码用于向指定的排行榜报告分数,并在打印报告成功或失败的信息。

using UnityEngine;
using UnityEngine.SocialPlatforms;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    void ReportScore(long score, string leaderboardID)
    {
        Debug.Log("Reporting score " + score + " on leaderboard " + leaderboardID);
        Social.ReportScore(score, leaderboardID, success => {
            Debug.Log(success ? "Reported score successfully" : "Failed to report score");
        });
    }
}

排行榜功能

成员类型描述实例
CreateLeaderboard静态函数创建一个 ILeaderboard 实例。Social.CreateLeaderboard()
LoadScores静态函数从给定的排行榜加载一组默认分数。Social.LoadScores(leaderboardID)
ReportScore静态函数向特定排行榜报告分数。Social.ReportScore(score, leaderboardID)
ShowLeaderboardUI静态函数显示游戏排行榜的默认/系统视图。Social.ShowLeaderboardUI()

ILeaderboard接口类型

以下是根据您提供的代码段,列出的成员、类型和描述的表格:

成员名称返回类型/参数类型描述
SetUserFiltervoid设置用户过滤器,只搜索指定的用户ID。
LoadScoresvoid加载排行榜分数,并在完成后调用回调函数。
loadingbool获取一个布尔值,指示排行榜是否正在加载分数。
idstring设置或获取排行榜的唯一标识符。
userScopeUserScope设置或获取排行榜搜索的用户范围。
rangeRange设置或获取排行榜返回的排名范围。
timeScopeTimeScope设置或获取排行榜搜索的时间范围。
localUserScoreIScore获取当前登录用户的排行榜分数。
maxRangeuint获取排行榜包含的分数总数。
scoresIScore[]获取由查询返回的排行榜分数数组。
titlestring获取排行榜的可读标题。

IScore接口类型

以下是根据您提供的代码段,列出的成员、类型和描述的表格:

成员名称类型描述
ReportScore方法(Action)报告分数的方法,回调函数接收一个布尔值表示操作成功或失败。
leaderboardIDstring获取或设置这个分数所属的排行榜ID。
valuelong获取或设置取得的分数值。
dateDateTime获取取得分数的日期。
formattedValuestring获取分数的正确格式化值,例如X点或X击杀。
userIDstring获取拥有这个分数的用户的ID。
rankint获取分数在排行榜中的排名或位置。

Social.CreateLeaderboard函数

创建排行榜
这段代码定义了在游戏启动时创建一个排行榜实例,设置其ID并加载分数,然后在控制台输出加载的分数数量和每个分数的详细信息。

using UnityEngine;
using UnityEngine.SocialPlatforms;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    // Use this for initialization
    void Start()
    {
        ILeaderboard leaderboard = Social.CreateLeaderboard();
        leaderboard.id = "Leaderboard012";
        leaderboard.LoadScores(result =>
        {
            Debug.Log("Received " + leaderboard.scores.Length + " scores");
            foreach (IScore score in leaderboard.scores)
                Debug.Log(score);
        });
    }
}

Social.LoadScores函数

这段代码展示打印每个分数的用户ID、格式化后的分数值和得分日期,或者如果没有分数被加载,则输出"No scores loaded"。

using UnityEngine;
using UnityEngine.SocialPlatforms;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    void Start()
    {
        Social.LoadScores("Leaderboard01", scores => {
            if (scores.Length > 0)
            {
                Debug.Log("Got " + scores.Length + " scores");
                string myScores = "Leaderboard:\n";
                foreach (IScore score in scores)
                    myScores += "\t" + score.userID + " " + score.formattedValue + " " + score.date + "\n";
                Debug.Log(myScores);
            }
            else
                Debug.Log("No scores loaded");
        });
    }
}

Social.ReportScore函数

用于向指定的排行榜报告分数,并在打印报告成功或失败的信息

using UnityEngine;
using UnityEngine.SocialPlatforms;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    void ReportScore(long score, string leaderboardID)
    {
        Debug.Log("Reporting score " + score + " on leaderboard " + leaderboardID);
        Social.ReportScore(score, leaderboardID, success => {
            Debug.Log(success ? "Reported score successfully" : "Failed to report score");
        });
    }
}

参考地址

Apple Support : Play with friends in Game Center on Apple Vision Pro
Apple UnityPlugins - Github
Unity Document : Apple Social API
Apple Developer Game Center

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值