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();
}
相关推荐
Oiiouui3 天前
Godot-GridGame架构逻辑层与实体/物品层篇
架构·游戏引擎·godot
坐吃山猪4 天前
Godot01-初体验
godot·1024程序员节
Oiiouui4 天前
针对Godot-GridGame(网格游戏)的DI注入+RefCounted数据驱动信号流架构设计的研究(全程开源)
游戏·游戏引擎·godot·1024程序员节
Oiiouui4 天前
Godot-GridGame架构数据层篇
架构·godot·1024程序员节
狂野小白兔23 天前
AI游戏制作04——Codex 搭配 Godot MCP 全流程教程
人工智能·游戏·godot
狂人开飞机1 个月前
23、实战平台跳跃游戏
游戏·游戏引擎·godot
狂人开飞机1 个月前
27、实战物理益智游戏
游戏·游戏引擎·godot
狂人开飞机1 个月前
21、游戏架构设计模式
游戏·游戏引擎·godot
烛阴1 个月前
Godot 4 入门(04):CharacterBody2D 实现八方向移动
godot
狂人开飞机2 个月前
14、游戏手感与视觉打磨
游戏·游戏引擎·godot