godot 服务器客户端设计中的精灵更新

cs 复制代码
/// <summary>C→S:玩家发出的操作意图(按键方向/目标点)。服务器权威计算真实坐标。</summary>
[MessagePackObject]
public class EntityMoveCmd
{
    [Key(0)] public long EntityId { get; set; }   // 我控制的那个
    [Key(1)] public float DirX { get; set; }      // 标准化方向向量(或0)
    [Key(2)] public float DirY { get; set; }
}

/// <summary>S→C:新实体出现在视野内(出生/进入)。</summary>
[MessagePackObject]
public class EntitySpawn
{
    [Key(0)] public long EntityId { get; set; }
    [Key(1)] public ushort TypeId { get; set; }   // 精灵类型:玩家/小兵/怪物...
    [Key(2)] public float IsoX { get; set; }      // 浮点坐标(允许像素级插值)
    [Key(3)] public float IsoY { get; set; }
    [Key(4)] public byte FaceDir { get; set; }    // 0-7 朝向
}

/// <summary>S→C:实体最新状态快照,多条打包。</summary>
[MessagePackObject]
public class EntityState
{
    [Key(0)] public long EntityId { get; set; }
    [Key(1)] public float IsoX { get; set; }
    [Key(2)] public float IsoY { get; set; }
    [Key(3)] public byte FaceDir { get; set; }
    [Key(4)] public byte AnimFrame { get; set; }  // 当前动画帧,0=idle
    [Key(5)] public byte Flags { get; set; }      // 位标志:1=移动中,2=攻击中...
}

/// <summary>S→C:实体消失(死亡/离开视野)。</summary>
[MessagePackObject]
public class EntityDespawn
{
    [Key(0)] public long EntityId { get; set; }
}

/// <summary>S→C:批量状态更新包(1条消息含多条 EntityState,降低 UDP 头开销)。</summary>
[MessagePackObject]
public class EntityStateBatch
{
    [Key(0)] public uint Tick { get; set; }       // 服务器 tick 号,客户端做插值用
    [Key(1)] public List<EntityState> States { get; set; } = new();
}
相关推荐
狂人开飞机2 天前
23、实战平台跳跃游戏
游戏·游戏引擎·godot
狂人开飞机3 天前
27、实战物理益智游戏
游戏·游戏引擎·godot
狂人开飞机4 天前
21、游戏架构设计模式
游戏·游戏引擎·godot
烛阴4 天前
Godot 4 入门(04):CharacterBody2D 实现八方向移动
godot
狂人开飞机5 天前
14、游戏手感与视觉打磨
游戏·游戏引擎·godot
狂人开飞机6 天前
15、音频系统
游戏引擎·godot
狂人开飞机6 天前
16、粒子线条与视觉特效
游戏引擎·godot
狂人开飞机6 天前
11、UI系统
游戏引擎·godot
狂人开飞机7 天前
10、相机系统
游戏引擎·godot
烛阴9 天前
Godot 4 入门(03):用第一份 GDScript 驱动节点
godot