Add player search menu - Search for players - (Unity module)
What's on the menu
In this tutorial, you will learn how to prepare the user interface (UI) you will use to find players by their display name and send friend invitation requests. The files are available in the Resources sections and consists of the following:
- FindFriendsMenuHandler_Starter.cs: A C# script you will to call some functionalities in order to find players.
- CS file:
/Assets/Resources/Modules/FriendEssentials/Scripts/UI/FindFriendsMenuHandler_Starter.cs
- CS file:
- FindFriendsMenuCanvas_Starter.prefab: A prefab to display the found player information, such as their display name, avatar, and a button to send a friend invite.
- Prefab file:
/Assets/Resources/Modules/FriendEssentials/Prefabs/FindUser/FindFriendsMenuCanvas_Starter.prefab
- Prefab file:
Take a look at more details on how the UI is constructed.
Find Friend Canvas
Below is the preview of the FindFriendsMenuCanvas_Starter.prefab
. This UI consists of a search bar and a list to display the found player entries.
The search bar and the list to show the found potential friends are defined in FindFriendsMenuHandler_Starter.cs
.
[SerializeField] private TMP_InputField friendSearchBar;
[SerializeField] private RectTransform friendListContent;
[SerializeField] private RectTransform defaultPanel;
[SerializeField] private RectTransform loadingPanel;
[SerializeField] private RectTransform loadingFailedPanel;
[SerializeField] private RectTransform loadingSuccessPanel;
[SerializeField] private Button backButton;
There is also the _panels
field to store the panel value and the _usersResult
field to store the search results.
private List<RectTransform> _panels = new List<RectTransform>();
private Dictionary<string, RectTransform> _usersResult = new Dictionary<string, RectTransform>();
The FriendFriendsView
enum is used as the entry point to navigate between each panel.
enum FindFriendsView
{
Default,
Loading,
LoadFailed,
LoadSuccess
}
To switch to each panel, the property is defined that you can set.
private FindFriendsView CurrentView
{
get => CurrentView;
set => ViewSwitcher(value);
}
private void ViewSwitcher(FindFriendsView value)
{
switch (value)
{
case FindFriendsView.Default:
SwitcherHelper(defaultPanel);
break;
case FindFriendsView.Loading:
SwitcherHelper(loadingPanel);
break;
case FindFriendsView.LoadFailed:
SwitcherHelper(loadingFailedPanel);
break;
case FindFriendsView.LoadSuccess:
SwitcherHelper(loadingSuccessPanel);
break;
}
}
private void SwitcherHelper(Transform panel)
{
panel.gameObject.SetActive(true);
_panels.Except(new []{panel})
.ToList().ForEach(x => x.gameObject.SetActive(false));
}
There is function called ClearSearchPanel()
to help remove the search result
private void ClearSearchPanel()
{
friendSearchBar.text = "";
GetComponentsInChildren<FriendResultPanelHandler>().ToList().ForEach(x => Destroy(x.gameObject));
_usersResult.Clear();
}
Friend Result Component
Below is the preview of the FriendEntryComponent.prefab
. This prefab displays player information, such as a display name, avatar, and a send friend invite button.
This prefab has a script component called FriendResultPanelHandler.cs
which holds the UI references for the display name, avatar, and the send invite button.
Ready The UI
In this section, you will learn how to prepare the UI prefabs.
Open
FindFriendsMenuHandler_Starter.cs
and add the code below. This line of code is to pass the callback function into the search bar reference that is already predefined.void Start()
{
// There are lines of predefined code, truncated for brevity.
friendSearchBar.onEndEdit.AddListener();
}Create a function called
FindFriend
which will be triggered when the search bar is filled. Later, you will call the functionality to find a player and send a friend invitation request with this function. For now, add the following log as the placeholder:private void FindFriend(string displayName)
{
if (string.IsNullOrEmpty(friendSearchBar.text) || string.IsNullOrEmpty(friendSearchBar.text))
{
return;
}
ClearSearchPanel();
//TODO: Implement friend wrapper
Debug.LogWarning($"Find friends is not yet implemented");
}Update your
Start()
function by addingFindFriend
as a listener to thefriendSearchBar
reference.void Start()
{
// There are lines of predefined code, truncated for brevity.
friendSearchBar.onEndEdit.AddListener(FindFriend);
}In the Unity Editor, go to
Assets/Resources/Modules/FriendEssentials
. There, you will find a asset config calledFriendEssentialsAssetConfig
. Open it and enableIs Starter Active
. This will activate the friends-related UI starter files.Play the game in Editor. If the implementation was successful, you will be able to navigate to Social > Find Friends. Try to find a friend by clicking on the text input and pressing Enter, and you will see the log you added:
Find friends is not yet implemented
Resources
- The files used in this tutorial are available in the Unity Byte Wars GitHub repository.
- Assets/Resources/Modules/FriendEssentials/FriendEssentialsAssetConfig.asset
- Assets/Resources/Modules/FriendEssentials/Scripts/FindFriendsMenuHandler_Starter.cs
- Assets/Resources/Modules/FriendEssentials/Scripts/FindFriendsMenuCanvas_Starter.prefab
- Assets/Resources/Modules/FriendEssentials/Prefabs/FindUser/FriendEntryComponent.prefab
- Assets/Resources/Modules/FriendEssentials/Scripts/UI/FriendResultPanelHandler.cs