unity-unet-设置player的开始位置
- 当客户端连接成功并验证通过时(你自己的验证逻辑,后面有这样的文章),会通知服务端spawn 一个该 player ,该 player 的 transform 可以自定义设置
使用
直接在 Scene 中丢几个空对象,挂上一个 Network Start Position 组件

然后在 Network Manager 中设置随机方式,就可以随机这几个点 Spawn player 了
两种随机方式的解释,传送门:点我
- Random : 在几个 startPosition 中随机选择
- Round Robin:在几个 startPosition 中循环选择
源代码
Network Start Position
在代码里面是直接 在 Awake 时就往 Network Manager 中丢进去了 Transform1
2
3
4public void Awake()
{
NetworkManager.RegisterStartPosition(transform);
}Network Manager
1
2
3
4
5static public void RegisterStartPosition(Transform start)
{
if (LogFilter.logDebug) { Debug.Log("RegisterStartPosition:" + start); }
s_StartPositions.Add(start);
}两种选择方式的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31public Transform GetStartPosition()
{
// first remove any dead transforms
if (s_StartPositions.Count > 0)
{
for (int i = s_StartPositions.Count - 1; i >= 0; i--)
{
if (s_StartPositions[i] == null)
s_StartPositions.RemoveAt(i);
}
}
if (m_PlayerSpawnMethod == PlayerSpawnMethod.Random && s_StartPositions.Count > 0)
{
// try to spawn at a random start location
int index = Random.Range(0, s_StartPositions.Count);
return s_StartPositions[index];
}
if (m_PlayerSpawnMethod == PlayerSpawnMethod.RoundRobin && s_StartPositions.Count > 0)
{
if (s_StartPositionIndex >= s_StartPositions.Count)
{
s_StartPositionIndex = 0;
}
Transform startPos = s_StartPositions[s_StartPositionIndex];
s_StartPositionIndex += 1;
return startPos;
}
return null;
}如果想自定义 start position 的话,可以继承并重写这几个方法