Files
nexus/wiki/concepts/BandwidthManagement.md
2026-04-26 12:02:53 +08:00

65 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "Bandwidth Management"
type: concept
tags: [networking, performance, multiplayer]
sources: [unity-multiplayer-engineer]
last_updated: 2026-04-26
---
## Aliases
- Network Bandwidth Optimization
- 带宽管理
## Definition
带宽管理是在多人游戏中**控制网络流量**的技术和策略,目标是在有限的带宽下提供流畅的游戏体验。典型目标:每玩家稳态带宽 < 10KB/s。
## Core Techniques
### 1. Dirty Check脏值检查
`NetworkVariable` 仅在值真正变化时触发同步,避免重复设置:
```csharp
// BAD: 每帧设置相同值 → 无意义网络流量
void Update() {
Position.Value = transform.position; // 即使位置没变也同步!
}
// GOOD: 值真正变化才同步
void FixedUpdate() {
if (Vector3.Distance(transform.position, lastPosition) > 0.01f)
{
Position.Value = transform.position;
lastPosition = transform.position;
}
}
```
### 2. Throttling限流
非关键状态更新频率限制:
- 生命值条:最高 1Hz
- 分数:最高 1Hz
- 位置同步:使用 NetworkTransform 而非每帧 NetworkVariable
### 3. Delta Compression差分压缩
对复杂结构使用 `INetworkSerializable` 只同步增量:
```csharp
public struct ComplexState : INetworkSerializable
{
public Vector3 position;
public Quaternion rotation;
// 只同步变化的部分
}
```
### 4. Object Pooling对象池
NGO NetworkObject 的 spawn/despawn 成本高,对频繁创建的对象使用对象池复用。
## Performance Target
- 每玩家稳态带宽:< 10KB/s
- 峰值带宽(事件触发时):< 50KB/s
- 同步延迟容忍200ms 延迟下无明显卡顿
## Related Concepts
- [[NetworkVariable]]: 带宽管理的核心对象
- [[ClientPrediction]]: 预测减少对服务器状态的依赖
- [[UnityMultiplayerEngineer]]: 负责带宽优化的专家