ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Game Centerの利用:ダッシュボード、アクセスポイント、プロファイル
Appleのソーシャルゲームネットワークが利用できるようになりました。ここでは、そのゲーム内インターフェイスやまったく新しいプレイヤーエクスペリエンスを始めとする、Game Centerの最新のアップデートをご紹介します。GameKitをAppに組み込んでプレイヤーを効果的に認証し、プレイヤーをゲーム内のダッシュボードに誘うアクセスポイントを利用する方法を学びましょう。そこからプレイヤーのプロファイルとプライバシーオプションについて見ていきます。 Game Centerのインターフェイス、ダッシュボード、そしてプレイヤーのプロファイルについて見た後は、引き続き次の動画でLeaderboard、達成項目、マルチプレイヤーゲームについてご紹介します。 これらの新機能に関するゲームのインターフェイスの準備の詳細については、”Designing for Game Center”をご覧ください。
リソース
関連ビデオ
WWDC22
WWDC20
-
ダウンロード
Hello and welcome to WWDC. Hi I'm Ally and I'm the engineering program manager for Game Center. I'm super excited to talk to you about not only what's new but to also walk you through some updates to existing features that we think you and your players are really going to love throughout both sessions. We'll touch on all the core features of Game Center and at the end we hope you walk away equipped with the tools you need to add game center support to your game.
But before we get to details let's take a minute to talk about what Game Center is and what it offers you and your players. Game Center is Apple's own social gaming network. It offers a single identity for players to use across all their games. And once signed in they can instantly access their game center network of friends. As a developer you can implement as many or as few games under features as you'd like. It's really about what makes sense for your game. Leaderboards are a good place to start. If you're new to game center they let your players see how they stack up against friends and other global players. And as players progress through your game why not reward them along the way. Achievements are a great mechanism to do just that. They also encourage players to come back and keep playing. And if your game is more fun when played with others you can also use Game Center to create rich multiplayer experiences. Most of Game Center's functionality can be added within your own custom built UI or you can take advantage of the Native Game Center offering which has been completely refreshed this year. That's what I'd like to walk you through now to do that. Let's jump into a game. Upon launch the Game Center welcome banner will still appear but once it rolls away a new element appears. This is the Game Center access point. At a glance I see some useful highlights like how many achievements I've earned and where I stand in the leaderboards all without any action on my part. Once the highlights finished displaying the access point collapses into my player Avatar. This element is meant to remain on your title screen as a consistent way for players to access Game Center to add Access Point functionality within your game. You'll need to adopt the Access Point API. This lets you choose what corner to position it in and whether or not you want to display highlights to the player. Christy will cover Access Point implementation in depth a little bit later. but for now let's tap on my player Avatar. This takes me to the in-game dashboard a centralized location for players to browse and interact with Game Center. From here you have quick access to existing features like leaderboards and achievements. But as you've probably already noticed the biggest change is the addition of a new section that offers in-game access to your game center player profile.
But before we dig into that let's talk about the main dashboard for just another second. To give your players access to the top level dashboard You can adopt the Dashboard API. Your player will then be able to choose what section they want to explore and if you already link to specific sections of the dashboard on your game don't worry those will continue to work as well. For example if you link to an individual leaderboard somewhere within your UI we'll still take you directly to it. Top level highlights within the dashboard are also new in iOS 14. These are little bits of information that are meant to offer useful stats at a glance. You'll see similar highlights throughout each section of the dashboard so let's continue to drill in. Tapping on the first section of the dashboard brings me to my own player profile. Right away I get some useful stats about my overall gameplay.
I can view and edit my friends list or see a list of players I've recently been matched with. I'm also offered some friends suggestions here and if I see one I like I can tap uninvite and send that person a friend request. All of this can be done without having to leave the game. Scrolling further I now have a way to view the achievements I've earned across all my games and if I want to change something within my profile like my nickname or Avatar I could tap on profile settings. I'm pretty happy with my profile though so let's go back to the dashboard. Next up is achievements. Right away I'm greeted by the achievements I've already completed. This is a great way to let the player feel a sense of accomplishment. Scrolling a little further here are the achievements I've yet to earn. And if the game is implemented in progress achievements like this one has I can tell how close I am to earning it. Notice that the artwork you choose to use for achievements is prominently displayed. We'd encourage you to check out the design for game center session as well as the human interface guidelines for guidance on how to create great achievement art. Both will cover best practices for creating all kinds of assets for your game and later on Dursa will walk you through exactly how to setup different kinds of achievements within your game. Let's move on to leaderboards. Just like achievements the artwork associated with your leaderboards is now the center of attention so it's a great idea to use different assets for each one. This is an opportunity to help the player better recognize which leaderboard they're looking for. The design session I referenced just a second ago also has details on creating great leaderboard art. Tapping into an individual leaderboard the most obvious difference is the addition of a friends only leaderboard. This is now the default and makes it much easier for players to see how they rank amongst their friends. I could also view global and recent leaderboards if I want by changing views at the top. But while we're on the topic of friends I can also tap on a friend within a leaderboard. This brings up their player card and if that friend has chosen to share their info I can see what they've recently played as well as their achievement progress. The best part is player cards are accessible in lots of new places. I can see the same information on my friends list and even while browsing the app store which we'll talk more about in just a bit. Returning to the leaderboard perhaps the largest change is the option to create a recurring leaderboard. This leaderboard is set to occur every 15 minutes and I'm currently only in fourth place. That's OK. Scores will reset shortly and I'll have another chance to come out on top. Notice that I can see my standing not only in the current leaderboard but in the last iteration I played in as well. Recurring leaderboards can be setup within app store connect similar to classic leaderboards. Later on New Dan will be walking you through how to configure both types. Returning to the dashboard one last time the final section to check out is actually an optional one and that's challenges. We only made one change this year but it's one worth calling out. The Challenges Feature now lives behind a new opt in flag with an app store connect by default. The challenges section of the dashboard will not appear within your game. However if this is a feature you support and would like your players to continue to have access to simply check a box and app store connect and you're good to go. Now let's move on to a different area of Game Center and that's multiplayer games that are can be used to create both real time and turn based multiplayer experiences during implementation. You can choose the one that fits best within your game. The other choice you'll need to make is whether you want to use your own multiplayer UI or the default Game Center one. To help you decide let's take a look at the native experience.
Choosing the multiplayer option from the main menu brings up the new UI. As you can tell the colors of the game underneath really show through. This is meant to make the design feel at home within any game with no additional work from the developer. Now let's set up a game the way a player would. At the top I can adjust how many players I want to add up to the developer specified limit. For this example let's choose 3. Within each slot I can tap on add player. This will bring up the player picker. This is where I choose the people I want to play with. If nearby players exist they'll appear at the top. Or what I tend to do most often I can choose to play with an existing Game Center Friend. We'll also offer suggestions based on people you've recently played with or recently contacted on your device. Coming back to the main screen I don't have to fill all these player slots in if I don't want to. Any slots I leave blank will automatically be auto matched. And now I'm ready to start the game. Look how easy that was. No join codes no friction just setup and play. And that's a quick overview of the new multiplayer UI. A little later on. Christy will walk you through in more detail.
Now that you've seen an overview of what Games Center has to offer I want to spend just a few minutes talking about some new ways we think Game Center can help players discover new content and there's no better place to start than within the App Store. Now when browsing popular areas of the store like the Arcade and Games tabs players can better discover what their Game Center friends are playing. We're also integrating the same information right into your game's product page. I can even view a friends player card right within the app store. From there I can check out more of their recently played games and download any of the ones that look interesting to me. We think this will give players a convenient way to discover new games they may have otherwise missed. Now let's start diving into details. Here's a look at how the rest of the sessions will break down. To get started Udayan is going to show you how to implement the dashboard API within your game.
After that Christy will cover adding access point functionality. Followed by players and friends where John will show you not only how to enable Game Center but also how to properly interact with the local player and more. And this will bring the first session to a close. To kickoff part two Udayan will be returning to show you how to set up both classic and recurring leaderboards.
In the achievement section Dursa will walk you through the different types of achievements how to set them up and how to ensure they're reported accurately.
Finally Christy will talk about multiplayer functionality and what's new there. But to get you started with Dashboard I'd like to now turn it over to Udayan.
Thank you Ali. And hello everyone. My name is Udayan Kale. I'm in the Game Center engineering team. In this part of the session we will take a deeper look at the games into dashboard. Ally just showed you the new games into dashboard. I will know show you ways to invoke the main dashboard and each dashboard section from within your game. New games into dashboard is a consistent one stop UI for many games into features. It allows you to access the local player's profile data about achievements and challenges. All these features are provided to you through the familiar GKGamesCenterViewController class.
Here is an example of using the dashboard. It uses the same GKGamesCenterViewController class that you are probably using today. The main difference is how you initialize it. For most games. I recommend using the main dashboard view. You can see here when I initialize the view controller I'm specifying the dashboard state. This gives you the main view that you see here on the right.
Another option is to go directly to a specific section of the dashboard. You can go right into the leaderboards achievements challenges or the local player's profile. All you need to do is set the state to the one you want.
So here is the achievement section. You can see I won three achievements so far and I can browse through the achievements to see which ones are remaining. Or here I've chosen to go straight to the player profile view. I can look at friends people I've played with and access my profile settings. All of this is up to you. You can also deep link directly to a specific leaderboard. For this you just provide the leaderboard ID along with the playerScope global or friends and the timeScope all time this week or today and present the view controller. Regardless of which section you start them in your players will be able to navigate to any available section on their own. So that's all it takes to set up the new dashboard. You wanted to make it easy for you to move your apps onto this right away. Now let's talk about the new access point and for that let me welcome Christy. Thank you.
Thank you Udayan. Today I want to talk about Access Point a great new way to let your players view and manage their game center data right within the game. As you can see there is now a small button in the upper left with your avatar in it. Tapping this button will take the users of the in-game dashboard. This button can be placed in any corner that you choose. Additionally there are options to show highlights including the number of achievements earned or your rank on the default leaderboard. Ally has already showed you what this looks like from the player perspective. So now let's take a look at how to adopt access point within your game. So first I'll cover some configuration options that let you specify position content and so forth. Then I will talk to you about how to display access point as well as some behaviors around this. Next there's some properties you can observe to know when you're presenting Game Center and who adjust your layout. And finally we'll cover some considerations for Apple TV and game controllers and how to trigger the access point programmatically. So let's talk about positioning by default access point is placed on top leading which is the upper left corner.
However access point is flexible so you can place in any corner of the screen that best suits your games UI. The positioning of access point will depend on your language setting. So in languages like Arabic and Hebrew top leading will appear on the top right top trailing on the upper left and so forth on the bottom from right to left. Access Point allows you to choose which highlights you wish to display. You can choose to adjust the avatar or show highlights and clear the number of achievements you've earned or your rank on the default leaderboard. So here's how to configure and show the access point. Typically Want to display Access Point while you're on your main menu. So first I want to set the location to be the top left. Now I set Access Point to showHighlights and finally I set isActive to be true in order to activate it. Please notice that all of these calls are to a shared singleton off of GKaccesspoint. As I just showed in the code we recommend that you show your access point when presenting your main menu. You should hide the access point in situations like cinematic intros game play or your settings screen. Our design team has put together some best practices for when to show and hide Access Points. I suggest you check that out. Now if the player taps access point they will be taken into the dashboard. While that is happening you may wish to pause your menu animations or whatever. We provide a property isPresentingGameCenter that you can use for this. So here I am setting up an observer to keep an eye on that and based on this property I'll pause or unpause my game. In this case the Access Point overlaps the moon in our sample lab so we provide a property frameInScreenCoordinates which can be used to adjust the layout of your UI. In this case we use the frame to shift the artwork out of the way. This can also be observed so as the access point progresses through each of it's highlights. Now let's show you what this looks like in code. Here I'm observing the property and when a change happens I grab the frame from our singleton convert it to my views local coordinates and adjust the layout. Another use for frame and screen coordinates is for games using controllers or an Apple TV where you track the remote directly. As you can see as the user navigates through the menu of our game. The game draws its own custom feedback. Here you can use frame and screen coordinates to draw focus feedback when the user navigates the area behind the access point. Here's what this looks like in code. The first part is similar to our previous code where we get the screen frame for the access point and convert it to my view coordinates. Then I toggle focus feedback based on whether or not the tracking position is inside the frame of the access point. To finish this we need to do one more thing. When the user selects the access point element they call our programmatic API triggerAccessPoint to show the dashboard. In closing I've given a quick tour of access point and gone through the API used for adoption including configuration activation observable properties and programmatic activation.
Now let's hand it off to Jonathan Ellenbogen.
Thanks Christy. I'm Jonathan Ellenbogen and I'm on the App Store team. I'm going to talk to you about players friends and getting started with Game Center. Let's start with players. Just like in a game Game Center refers to users as players. Game Center uses players to track scores achievements build leader boards and start multiplayer games. Players have one Avatar nickname that is used across all Game Center games. This gives your users a consistent and familiar look right from the start which is good for both users and developers saving you the time and trouble of implementing this yourself. The fact that players have just one account means that they only need to sign in once per device and can start to play your game even faster.
And this year with all the new redesign game center features players are more accessible than ever from leaderboards to friends lists users can access player profiles for themselves and their friends. Before using Game Center for the first time users will create a single account which will identify them across all Game Cnter games. In code players are represented by two different classes. GKLocalPlayer and GKPlayer. A great way to think about these classes is that GKLocalPlayer is the user playing your game. While GKPlayers are everyone else. Let's take a quick look and compare.
All players will have an avatar and a nickname. Both types of players will also have scoped player IDs which can be used for leaderboards game invites and challenges. However the local player will have a persistent ID while GKPlayers have ideas that change with every instantiation of your game.
Since the local players used to represent the player that's currently signed in some additional information is needed. The local player class exposes information related to restrictions which may need to be applied in your game. The local player is also used by Game Center services to save state such as scores achievements and friends. Now let's look at how you can start using players in your game. First before we start using players directly you'll need to enable Game Center. To do this add Game Center as a capability in your Xcode project.
You'll also need to enable games in your App Store Connect. This is there in the feature section under Game Center. You'll be prompted to enable Game Center if you haven't already.
After Game Center has been enabled in Xcode and App Store Connect you'll need to authenticate the local player before accessing any game center APIs. Authentication allows game center to make sure there's a signed and local player and that the game's center account is ready to use. Authentication. also checks whether your game has been configured to make Game Center API calls and talk to Game Center services. Once authenticated you'll be able to turn on Game Center features receive notifications such as game invites challenges and user changes. Let's look at how authentication works in your game. Authenticating the local players should be done as early as possible in the lifecycle of your game. This ensures your game is ready to receive notifications and make Game Center API calls. First you'll need to set the authentication handler on the shared instance of GKLocal Player.
This will kick off Game Center authentication automatically and you'll receive callbacks when authentication related changes happen and you can respond accordingly. Now it's likely that the local player will have already been signed in. In this case the authentication handler will be called without any errors or UI to present. Which means you've successfully authenticated and are ready to go. There will also be cases where the player has not yet authenticated with Game Center.
In these cases your authentication handler will be called with an error and a view controller. Your option is to present this view controller giving the user a chance to sign in or continue their account set up. Once the user has successfully signed in your authentication handler will be called again this time without any errors or UI to present and you're ready to start your game. Now you'll also need to handle the case where the user decides not to sign in. When this happens your authentication handler will be called yet again but this time with an error. You should disable game center and start your game. Once you've successfully authenticated and have a signed in local player you can start accessing Game Center APIs. But I'm going to talk to you about player profiles. This year player profiles have moved beyond just settings and are now a larger part of Game Center. As a result you have the ability to present local player profiles right from within your game and it couldn't be easier. All you have to do is initialize a GKGameCenterinterViewController with the local player profile state. Save yourself as the delegate and present it as you would any other view controller. It's that simple. From here players can see their achievements find friends and see what their friends are playing. There are cases where the local player may have certain restrictions on their count and it's your app's responsibility to check these restrictions and disable or hide relevant content.
As we can see here in addition to checking whether the user is under age has access to multiplayer games. I'm also checking the personalized communications restriction.
This is new in IOS 14 and when this restriction is turned on it means the user will not be able to use voice or messaging features in game center multiplayer games. So if your app is in custom communication features. Be sure to honor this flag and disable them when necessary. This restriction will always be true if the users under age. This year as part of user management on tvOS Game Center has added support for multiple games and accounts per device. This means that as users switch accounts the GKLocalPlayer will change and your game will receive callbacks via the authentication handler when it does. This is all done transparently to your game giving you the ability to easily support multiple players with very few changes. Any tvOS game can easily opt into this feature by adding the user management capability in Xcode. You can refer to the tvOS as multi-user session for more information.
Now let's talk about game center friends. Friends are an incredibly important part of game center and are used in leaderboards multi-player gaming and challenges.
And through friend profiles you'll be able to see which games your friends are playing and the achievements they've earned in those games. With local player profiles we now have one place where you can see all your Game Center activity including achievements and games. You can see all your friends and invite new ones. You'll also have access to your friends profiles. These are referred to as player cards. From here you can quickly see what your friends are playing and the achievements they've earned. This year you'll notice player cards are accessible from many different places throughout Game Center and with player profiles becoming a larger part of Game Center profile privacy invisibility becomes even more important. Players can choose from three different privacy settings. Everyone friends only and no one. This is all handled automatically in the game showing and hiding profile information depending on which settings your player chooses. Here you can see the difference between someone with a profile visible to everyone and a profile visible to no one. To wrap things up we've taken a look at the different types of game center players the importance of authentication and making sure that it's done as early as possible. The Game Center APIs around presenting player profiles honoring player restrictions and enabling multi user support on tvOS. We've talked about the new player cards and how different privacy settings affect what other players can and cannot see. Earlier Ally Udayan and Christy took you through what's new in Game Center the new in-game dashboard and how to enable Access Point in your game. In our next session you'll get a more in-depth look at some of the cool new features in leaderboards achievements in multiplayer gaming. That's all for this session. Thanks for watching and have a great rest your day.
-
-
10:05 - Presenting the main dashboard
// GKGameCenterViewController public init(state:) [...] // Example: Display Main Dashboard let vc = GKGameCenterViewController(state: .dashboard) vc.gameCenterDelegate = self present(vc, animated: true, completion: nil) [...] enum GKGameCenterViewControllerState : Int { case `default` case leaderboards case achievements case challenges case localPlayerProfile case dashboard }
-
10:51 - Display a specific leaderboard
// Display scores for a specific leaderboard let vc = GKGameCenterViewController( leaderboardID: "grp.xyz.laketahoe", playerScope: .global, timeScope: .allTime) vc.gameCenterDelegate = self present(vc, animated: true, completion: nil)
-
13:18 - Configure and show Access Point
// Configure and show Access Point func showMainMenu() { // Call your code to setup the main menu self.setupMainMenu() // Place access point on top left GKAccessPoint.shared.location = .topLeading // Show highlights GKAccessPoint.shared.showHighlights = true // Show it! GKAccessPoint.shared.isActive = true }
-
14:00 - Observing isPresentingGameCenter
let observation = GKAccessPoint.shared.observe( \.isPresentingGameCenter ) { [weak self] _,_ in self.paused = GKAccessPoint.shared.isPresentingGameCenter }
-
14:44 - Changing the frame
// Observable properties // frameInScreenCoordinates let observation = GKAccessPoint.shared.observe( \.frameInScreenCoordinates ) { [weak self] _,_ in let screenFrame = GKAccessPoint.shared.frameInScreenCoordinates let accessPointFrame = myView.convert(screenFrame, from: nil) // adjust your layout }
-
15:18 - Handling focus
// Apple TV and controllers // track and update focus func trackController(position: CGPoint) { let screenFrame = GKAccessPoint.shared.frameInScreenCoordinates let accessFrame = myView.convert(screenFrame, from: nil) // if the point is in the access point turn on feedback accessPointElement.focusFeedback = CGRectContainsPoint(accessFrame, position) }
-
15:38 - Handling selection
// Apple TV and controllers // Handle selection func accessPointSelected() { GKAccessPoint.shared.triggerAccessPoint {} }
-
20:01 - Showing the player profile
// Local player profile let profileVC = GKGameCenterViewController(state: .localPlayerProfile) profileVC.gameCenterDelegate = self present(profileVC, animated: true, completion: nil)
-
20:28 - Player restrictions
// Local player restrictions GKLocalPlayer.local.authenticateHandler = { viewController, error in let isGameCenterReady = (viewController == nil) && (error == nil) if isGameCenterReady { if GKLocalPlayer.local.isUnderage { // Hide explicit game content } if GKLocalPlayer.local.isMultiplayerGamingRestricted { // Disable multiplayer game features } if GKLocalPlayer.local.isPersonalizedCommunicationRestricted { // Disable in game communication UI } } }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。