重写OnServerAddPlayer的Unity网络管理器不会对播放器

时间:2018-03-30 16:01:54

标签: c# unity3d networking

在我的游戏中,我允许玩家改变场景中的颜色。它们可以经过一点油漆飞溅,它会改变它们的颜色。

我现在正在处理我的自定义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);

}

就像我上面说的那样,我在更改场景时得到的调试信息是正确的。如果玩家选择绿色,则控制台调试绿色,但生成的玩家仍然是默认颜色。

0 个答案:

没有答案