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();
}
相关推荐
卷无止境14 小时前
当独立开发者也能造出3A画质的游戏:Godot引擎深度解析
后端·python·godot
Python私教10 天前
Blender 到 Godot 4 可交互宝箱:从低模资源到开箱逻辑的完整管线
godot
Python私教10 天前
Godot 4 可交互机关门:用 Timer 与自定义信号解耦游戏逻辑
godot
Python私教10 天前
Godot 4 AnimatedSprite2D 实战:让待机与移动动画自动切换
nginx·游戏引擎·godot·动画·游戏开发
Python私教11 天前
Godot 4 CharacterBody2D 角色移动:输入、碰撞与八方向控制实战
人工智能·游戏引擎·godot·gdscript·游戏开发
Python私教11 天前
用 Godot 4 拆解 MOBA 技能:前摇、判定、后摇与冷却如何做成可靠状态机
godot
Python私教11 天前
Blender + Godot 4 制作 MOBA 防御塔:从低模、GLB 到碰撞与攻击范围
godot