在我的游戏中,我允许玩家改变场景中的颜色。它们可以经过一点油漆飞溅,它会改变它们的颜色。
我现在正在处理我的自定义NetworkManager我需要每次都保存对玩家颜色所做的更改,这样当我更改场景时,它将被应用。
为此,我编写了OnServerAddPlayer
函数的覆盖,如上面的Unity文档中所述。
我正在进行的更改根本没有应用于播放器!我有调试信息到控制台,我知道NetworkManager
有它需要的数据,因为它存储的颜色是正确的。
我将这些数据存储在NetworkManager
:
private Dictionary<int, PlayerDataStruct> _playerData;
PlayerDataStruct
是一个简单的结构,每个玩家都可以存储Color
,输入ID等内容。
这是我的OnServerAddPlayer
功能:
public override void OnServerAddPlayer(NetworkConnection conn, short
playerControllerId)
{
Transform spawn = GetStartPosition();
var player = (GameObject)GameObject.Instantiate(playerPrefab, spawn.position, Quaternion.identity);
PlayerDataStruct data = player.GetComponent<PlayerData>().data;
Debug.Log("[NetworkManager] Connected ID: " + conn.connectionId.ToString());
// Add this info to the dictionary
if(_playerData.ContainsKey(conn.connectionId))
{
Debug.LogWarning("[NetworkManager] ALREADY HAS THIS DATA IN IT ID:: " + conn.connectionId.ToString());
data = _playerData[conn.connectionId];
}
else
{
_playerData.Add(conn.connectionId, data);
}
Debug.Log("[NetworkManager] Set ID: " + conn.connectionId.ToString()
+ " color is " + data.PlayerColor.ToString());
NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
}
就像我上面说的那样,我在更改场景时得到的调试信息是正确的。如果玩家选择绿色,则控制台调试绿色,但生成的玩家仍然是默认颜色。