从网络数据复制到逻辑数据或使数据成为类成员

时间:2019-09-18 14:33:59

标签: c# unity3d

我正在使用unity3d与ProtoBuff一起开发网络游戏。

我定义一个BattleData.proto

message BattleData
{
    required uint64  id = 1;
    required string  name = 2;
    required int32   hp  = 3;  
    required int32   atk  = 4;  
}

我从net接收数据,然后将二进制数据反序列化为BattleData类。

现在我对如何使用它有疑问。

如果将数据作为类成员,则应使用logic.battleData.XXX,否则可以更快地使用logic.atk。

我不喜欢这种风格,因为这里有很多'。'。但是,如果我 选择另一个,则必须在原型更改后修改类BattleLogic

public class BattleLogic{
    public BattleData battleData;
 or???
    public ulong id;
    public string name;
    public int hp;
    public int atk;
}

1 个答案:

答案 0 :(得分:0)

如果您不喜欢.,您可以像这样使用properties

public class BattleLogic
{
    public BattleData battleData;

    // as expression body
    public ulong id 
    {
        get 
        {
            return battleData.id; 
        }
        set 
        {
            battleData.id = value; 
        }
    }
    // basically the same as expression bodies
    public string name { get => battleData.name; set => battleData.name = value; }
    public int hp { get => battleData.hp; set => battleData.hp = value; }
    public int atk { get => battleData.atk; set => battleData.atk = value; }
}

现在您可以读写

var id = battleLogicReference.id;
battleLogicReference.name = "XYZ";