Skip to content

Commit 4a79b18

Browse files
committed
update network in unreal
1 parent 28f9a99 commit 4a79b18

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
TODO:区分 `NM_Standalone``NM_DedicatedServer` 等,以及
2+
```c++
3+
UENUM()
4+
enum ENetRole
5+
{
6+
/** No role at all. */
7+
ROLE_None,
8+
/** Locally simulated proxy of this actor. */
9+
ROLE_SimulatedProxy,
10+
/** Locally autonomous proxy of this actor. */
11+
ROLE_AutonomousProxy,
12+
/** Authoritative control over the actor. */
13+
ROLE_Authority,
14+
ROLE_MAX,
15+
};
16+
```
17+
18+
19+
Flow
20+
* 服务器启动,`UEngine::LoadMap` 打开地图后 world::listen,创建 `UNetDriver`
21+
* 客户端启动,`UEngine::Browse` 中创建 `UPendingNetGame``UNetDriver`,与服务器建立连接,通过 control channel 与服务器交互 control message,默认情况下交互的 control message 见 [UE5 网络剖析(三) 登录](https://yuerer.com/UE5%20%E7%BD%91%E7%BB%9C%E5%89%96%E6%9E%90(%E4%B8%89)%20%E7%99%BB%E5%BD%95/),这里客户端从服务器获得需要打开的 map
22+
* 后续客户端的 tick 时加载该 map,加载完成后 `UPendingNetGame``UNetDriver` 迁移到新的 world 中。然后客户端会创建本地的 player controller(注意 player controller 不会 replicate),最后向服务器发送 `NMT_Join`
23+
* 服务器收到 `NMT_Join` 后,创建 player controller 和 character,这里的 player controller 对应的 `UPlayer` 就不再是 `ULocalPlayer`,而是 `UNetConnection`
24+
* character replication 给 client
25+
26+
character 和 game state base 都是 breplicate 为 true,然后得到
27+
APlayerState 会同步,然后 game mode 不同步
28+
29+
30+
TODO:理解清楚 replication 的流程,谁负责为 replication 为 true 的 actor 同步
31+
TODO:初始的 character 和 player controller 的创建
32+
TODO:如果有两张 map,每张 map 都有玩家,那服务器上是同时有两个 world 在跑?还是说我可以开两个服务器,每个服务器跑一个 map?
33+
TODO:指针是要怎么 replicate,比如 actor 的 owner,pawn 的 owner 是 player controller,这又是怎么同步的
34+
TODO:区分 Replicates 和 `Replicate Movement`,看看 [这篇](https://www.cnblogs.com/AnKen/p/8602233.html) 中做的实验
35+
TODO:为什么 Actor 的 Role 和 Remote Role 也是 replicated,以及 owner 也是 replicated 的?为什么 APlayerController 也被同步进来了,还是应该研究清楚什么时候同步,哪些会同步

0 commit comments

Comments
 (0)