My 3D Project:Unity 多人物理派对游戏
My_3DProject 是一款面向多人短回合对抗的 3D 物理派对游戏。项目使用 Unity、Mirror 和 KCP 专用服务器,主要系统包括场景生命周期、网络玩家、角色控制、运动与动画同步,以及可破坏的体素平台。整体结构把网络身份与角色表现分开,使客户端、服务器和远程观察者沿着各自的职责参与同一局游戏。
启动与场景
InitialScene 负责进入运行流程,随后载入常驻的 PersistentScene。网络管理器、角色装配管理器、场景切换器和 UI 位于常驻场景中;玩法场景则提供本局使用的地形和碰撞环境。
玩法场景由 SceneChanger 以 Additive 方式加载和切换。客户端与专用服务器使用同一场景请求入口,Mirror 负责连接和玩家生成,项目场景管理器负责玩法场景的生命周期。将常驻服务与每局场景分开后,角色、网络连接和界面可以跨玩法场景继续工作。
网络玩家与角色装配
Mirror 为每个连接生成 NetworkPlayer 网络根。网络根保存玩家身份、变换同步、角色编号、角色控制和运动同步等组件。服务器依据连接生成网络玩家,客户端再根据同步的角色编号装配对应的完整角色 Prefab。
角色 Prefab 同时服务本地拥有者和远程玩家。NetworkCharacterManager 根据本地身份启用或关闭输入、相机、音频监听器和角色表现组件:拥有者处理本地控制,远程实例保留模型与动画表现。网络根处理联机身份、运动和碰撞,角色 Prefab 则负责模型、Animator 和本地视听组件。
移动与动画
CharacterMotor 根据相机水平朝向计算移动方向,并组织加减速、跳跃和重力。每帧的位置更新通过一次 CharacterController.Move 完成,状态机维护 Idle、Run、Sprint、Rising 和 Falling 等运动状态。
网络变换与动画状态使用不同的数据链路。NetworkTransformReliable 同步位置和旋转;CharacterMotionSync 传递运动状态、角色局部移动方向和运动权重。远程客户端用收到的运动快照驱动 Animator,不执行拥有者的本地输入和移动逻辑。这样,位置同步描述角色在哪里,运动快照描述角色正在做什么。
体素平台
体素平台以轻量方块数据保存布局。编辑阶段将方块外表面合并为网格,并按区域组织碰撞;运行时射线命中后,根据碰撞位置定位对应方块。方块变化只重建受影响的表面和碰撞区域,并按需生成碎块表现。
方块数据、可见网格和碰撞区域通过位置关系对应。玩法逻辑负责决定方块何时变化,体素系统负责把数据变化反映到场景几何与物理交互中。
部分信息可能已经过时
粤公网安备44011102484817号