Skip to content

Commit a614f31

Browse files
update
adding single player session section under the configuration area after transports.
1 parent f7ca618 commit a614f31

2 files changed

Lines changed: 78 additions & 0 deletions

File tree

com.unity.netcode.gameobjects/Documentation~/TableOfContents.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* [Connection approval](basics/connection-approval.md)
1919
* [Max players](basics/maxnumberplayers.md)
2020
* [Transports](advanced-topics/transports.md)
21+
* [Single player sessions](advanced-topics/singleplayer.md)
2122
* [Unity Relay](relay/relay.md)
2223
* [Command-line arguments](command-line-arguments.md)
2324
* [Network components](network-components.md)
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# Single player sessions
2+
3+
Netcode for GameObjects provides a [SinglePlayerTransport](https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/api/Unity.Netcode.Transports.SinglePlayer.SinglePlayerTransport.html) which derives from [NetworkTransport](https://docs.unity3d.com/Packages/com.unity.netcode.gameobjects@2.13/api/Unity.Netcode.NetworkTransport.html).
4+
5+
This provides the ability to run a hosted session using the single player transport without having to modify your primary netcode script.
6+
7+
## Adding the single player transport
8+
9+
- Add the `SinglePlayerTransport` to your NetworkManager.
10+
- You can create a custom `MonoBehaviour` component to handle your connection flow or you can derive from `NetworkManager` and add additional methods/logic to handle starting a single player session or multiplayer session.
11+
- When starting a single player session, prior to starting the NetworkManager as a host (_required_), you will want to assign the `SinglePlayerTransport` to the `NetworkManager.NetworkConfig.NetworkTransport`.
12+
- When starting a multiplayer session, prior to starting the NetworkManager, you will want to assign the `UnityTransport` (_or any other `NetworkTransport` derived class that you might use for multiplayer sessions_) to the `NetworkManager.NetworkConfig.NetworkTransport`.
13+
14+
## Example script
15+
16+
Below is an example script that derives from NetworkManager to provide a single method to start a single or multi player session:
17+
18+
```csharp
19+
using Unity.Netcode;
20+
using Unity.Netcode.Transports.SinglePlayer;
21+
using Unity.Netcode.Transports.UTP;
22+
23+
/// <summary>
24+
/// Example of how to start a single player or multiplayer session.
25+
/// </summary>
26+
public class ExtendedNetworkManager : NetworkManager
27+
{
28+
private UnityTransport m_UnityTransport;
29+
private SinglePlayerTransport m_SinglePlayerTransport;
30+
31+
public bool StartSinglePlayer()
32+
{
33+
NetworkConfig.NetworkTransport = m_SinglePlayerTransport;
34+
return StartHost();
35+
}
36+
37+
public enum StartType
38+
{
39+
SinglePlayer,
40+
Client,
41+
Host,
42+
Server
43+
}
44+
45+
private void Awake()
46+
{
47+
m_UnityTransport = GetComponent<UnityTransport>();
48+
m_SinglePlayerTransport = GetComponent<SinglePlayerTransport>();
49+
}
50+
51+
public bool StartSession(StartType startType)
52+
{
53+
var startStatus = false;
54+
NetworkConfig.NetworkTransport = startType == StartType.SinglePlayer ? m_SinglePlayerTransport : m_UnityTransport;
55+
switch (startType)
56+
{
57+
case StartType.Host:
58+
case StartType.SinglePlayer:
59+
{
60+
startStatus = StartHost();
61+
break;
62+
}
63+
case StartType.Server:
64+
{
65+
startStatus = StartServer();
66+
break;
67+
}
68+
case StartType.Client:
69+
{
70+
startStatus = StartClient();
71+
break;
72+
}
73+
}
74+
return startStatus;
75+
}
76+
}
77+
```

0 commit comments

Comments
 (0)