Auto-sync: 2026-04-26 12:02
This commit is contained in:
64
wiki/concepts/BandwidthManagement.md
Normal file
64
wiki/concepts/BandwidthManagement.md
Normal file
@@ -0,0 +1,64 @@
|
||||
---
|
||||
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]]: 负责带宽优化的专家
|
||||
Reference in New Issue
Block a user