您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
58 行
2.1 KiB
58 行
2.1 KiB
using UnityEngine;
|
|
|
|
namespace Unity.Netcode.Samples
|
|
{
|
|
/// <summary>
|
|
/// Class to display helper buttons and status labels on the GUI, as well as buttons to start host/client/server.
|
|
/// Once a connection has been established to the server, the local player can be teleported to random positions via a GUI button.
|
|
/// </summary>
|
|
public class BootstrapManager : MonoBehaviour
|
|
{
|
|
private void OnGUI()
|
|
{
|
|
GUILayout.BeginArea(new Rect(10, 10, 300, 300));
|
|
|
|
var networkManager = NetworkManager.Singleton;
|
|
if (!networkManager.IsClient && !networkManager.IsServer)
|
|
{
|
|
if (GUILayout.Button("Host"))
|
|
{
|
|
networkManager.StartHost();
|
|
}
|
|
|
|
if (GUILayout.Button("Client"))
|
|
{
|
|
networkManager.StartClient();
|
|
}
|
|
|
|
if (GUILayout.Button("Server"))
|
|
{
|
|
networkManager.StartServer();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GUILayout.Label($"Mode: {(networkManager.IsHost ? "Host" : networkManager.IsServer ? "Server" : "Client")}");
|
|
|
|
// "Random Teleport" button will only be shown to clients
|
|
if (networkManager.IsClient)
|
|
{
|
|
if (GUILayout.Button("Random Teleport"))
|
|
{
|
|
if (networkManager.LocalClient != null)
|
|
{
|
|
// Get `BootstrapPlayer` component from the player's `PlayerObject`
|
|
if (networkManager.LocalClient.PlayerObject.TryGetComponent(out BootstrapPlayer bootstrapPlayer))
|
|
{
|
|
// Invoke a `ServerRpc` from client-side to teleport player to a random position on the server-side
|
|
bootstrapPlayer.RandomTeleportServerRpc();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
GUILayout.EndArea();
|
|
}
|
|
}
|
|
}
|