In this guide, we will do a quick rundown of how to create a lobby party with AccelByte. This guide is Unity specific but the flow is identical in any other SDK.
Whoever creates a party will become the party leader, only the party leader can invite other players to the party.
First things first, we need to make sure that the player is already logged-in and in the lobby.
Figure 1. GetLobby from AccelByte plugin
Then create party lobby function along with the callback that contains PartyInfo as it’s parameter. Inside PartyInfo there are PartyID, leaderID, members, invitees and invitationToken.
Figure 2a. CreateParty functionFigure 2b. Callback for CreateParty function
The CreateParty function can also be implemented right after the player presses the “InviteToParty” button in friend list and before calling “InviteToParty” function. It will check if the host/inviter already has a party, if not then create a party.
Invite To Party
The party leader is the only one that can invite other players to the party via their friend list. The party leader can only invite friends who are online.
Figure 3a. The player clicks on party slot button (+) bottom right cornerFigure 3b. The player clicks on Invite to party button
The first step begins with the party leader inviting a player, then the invited player will get the invitation. In this demo game, when the invited user gets the invitation, the game will show a popup invitation.
Figure 4a. InviteToParty functionFigure 4b. InviteToParty callback from FriendPrefab
The callback, OnInviteParty() located in FriendPrefab (created in Friends System) that is assigned for each friend in friend list. On the invited player, there is an event callback that needs to be setup.
Figure 5a. Add a listener to the invitedToParty eventFigure 5b. Remove listener the invitedToParty event
Right after the party leader invite, the invitation should arrive through the invitedToParty event. The PartyInvitation should be cached to a variable so it can be used with the JoinParty function in the next step. The abPartyInfo variable will be used to store information about the party that will be useful to update our UI later on.
Figure 6a. PartyInvitation variable and PartyInfo variableFigure 6b. OnInvitedToParty callback
The “From” value in PartyInvitation data is a userID, so we need to call GetUserData in order to get the displayname to show to the invited player, then set the popup text and show it on the screen. After the popup is shown to the screen player will be greeted with 2 options, “accept the invitation” or “decline the invitation”.
Figure 7a. Coroutine of ShowPopupPartyInvitationFigure 7b. PopupInvitation on Unity Scene under CanvasFigure 7c. Popup party invitation
Decline invitation just closes the popup invitation by calling SetActive to “false” on the popup’s gameobject, however, accepting the invitation will call the JoinParty function and the callback will update the current party with the latest info and also update to UI party slot once the partyInfo is retrieved successfully.
Figure 7d. Assign the AcceptPartyButton OnClick event to OnAcceptPartyClickedFigure 7e. OnAcceptPartyClicked is called once the accept button is clickedFigure 7f. Join party callback on the target player
The party slot will show us all the party members from abPartyInfo.members visually. It will record the userId, display name, and email.
The steps are :
Update the abPartyInfo data
ClearPartySlots (makes sure the list will not be stacked up)
Get all the party member display names and email (since we only have the userId from PartyInfo parameter)
The coroutine will wait up until all the party member’s data is collected, and then start updating the party slot UI.
Figure 7g. Party SlotsFigure 7h. Party Slots in Unity Scene:
Those four slots are divided into 2 sections, one PlayerButton (local), and 3 AddFriendButton. The one that we need to be managed is the 3 AddFriendButtons. Reference those 3 buttons with a Transform array to make use of it later.
After the party slot data is cleaned up, we then call GetPartyMemberInfo to get the info that we need to fill in partyMemberList.
Figure 7n. GetPartyMemberInfo Function that calls GetUserByUserIdFigure 7o. Fill in the partyMemberList except for the local player’s entry
Then after all the member’s info collected, the coroutine will start to run RefreshPartySlots() to execute updates on the UI.
Figure 7p. WaitForUpdatedPartyInfo Coroutine updates the UIFigure 7q. RefreshPartySlots to update each party prefab component located in the partyMemberButtonsFigure 7r. SetupPlayerProfile On PartyPrefab class
This way UI info about the party member will be updated. Right after this, all the party members will receive the JoinedParty event. Just like InvitedToParty, for this event, we need to set up the listener.
Figure 8a. Add Listener to JoinedParty EventFigure 8b. Remove Listener from JoinedParty event
The OnMemberJoinedParty function does some update to the party info variable in the AccelbyteLobbyLogic and updates to UI party slot once the partyInfo is retrieved successfully.
The ability to kick from party is also one of Party Leader’s available actions. The party leader can kick one of the party members and then kicked player will leave the party after receiving the kick notification.
Figure 10a. Kick From Party button
By hovering over the party slot button, the player profile popup will appear, the kick from party button is available here. This is part of PopupPartyControl as the party leader you can kick a party member and leave the party, as a member you can only leave the party. Figure 10b is showing the scene of the popup.
Figure 10b PopupPartyControl in the Unity scene
There are a few grouped game objects such as :
LocalLeaderCommand (will be shown when the playerButton triggers the onMouseHover event on Figure 7h, when the local player is a party leader),
LocalMemberCommand (will be shown when the playerButton triggers the onMouseHover event on Figure 7h, when the local player is a party member), and
MemberCommand (will be shown when any of AddFriendButton triggers the onMouseHover event on Figure 7h, when the local player is a party leader).
Figure 10c PopupPartyControl in code
On the memberCommand gameObject, add a listener for the kickFromParty button to kick each userId registered to each PartyPrefab.
Figure 11a. OnKickFromPartyClicked functionFigure 11b. KickPartyMember is calling AccelByte’s KickPartyMemberFigure 11c. OnKickPartyMember callback from KickPartyMember
The kicked player will receive KickedFromParty Notification right after being kicked by the party leader. The callback of this event will be used for updating/clearing the party slot.
Figure 12a. Register KickedFromParty as the listenerFigure 12b. Remove the listener of KickedFromPartyFigure 12c. Clearing party slot on callback KickedFromParty
All the other members will be getting LeaveFromParty event as the result of this action to update the PartyInfo and the UI party slot to the newest info where the kicked player is already gone.
Figure 13a. LeaveFromParty event registrationFigure 13b. Remove listener away after useFigure 13c. Update PartyInfo and update the party slots
Leave From Party
Figure 14. Leave action as a party leader
This action can be used by every member including the party leader. A member will be calling LeaveParty function and the other members will be getting the LeaveFromParty event just like kick from party section.
Figure 15. Leave party action from a party member
Here is the leave party function that is available on a party slot profile popup, which will call the AccelByte LeaveParty function. Right after that, the callback function clears the party slots, marking that they left the party.
Figure 16a. OnLeavePartyButtonClicked assigned to Leave Party buttonFigure 16b. Accelbyte’s LeaveParty functionFigure 16c. Clear party slots after leaving the party
Right after getting the event, all the remaining members will have to update their PartyInfo and their UI party slot as can be seen in Figures 13a, 13b and 13c on Kick From Party Section. If the one that leaves the party is party leader, the leader title will be transferred to the second player on the PartyInfo.members[] list.
That just about covers it for the Lobby feature. While this guide highlights what is available in our out of the box feature set, it is important to note that we can customize the platform to match your exact needs, from small changes to complete, bespoke features.
No two games are the same and we believe it is important to tailor our services to match each individual customer’s needs.