多人局域网游戏学习笔记:

视频网址:

https://www.bilibili.com/video/av42635205?from=search&seid=13300639985119867331

本地局域网运行,LAN模式,config中的DefaultEngine.ini文件中增加

[OnlineSubsystem]

DefaultPlatformService=Null

关卡设置:

MainMenu为开始关卡,空,默认设置

Arena01,Arena02为游戏关卡,第三人称地图,修改gamemode,playercontroller,defaultPawnclass

Lobby为大厅关卡,仅平面地图,增设PlayerStart点和BlockingVolume修改gamemode,playercontroller,defaultPawnclass

TravelMap空,默认设置

多人局域网游戏纯蓝图

多人局域网游戏纯蓝图

 

 

一、AllLevel

  • GameInfoInstance
  1. 展示MainMenu,允许鼠标光标
  2. 保存游戏,分情况显示MainMenu和OptionMenu
  3. 显示HostMenu
  4. 显示ServerMenu
  5. 显示OptionMenu,根据save文件是否存在决定WelcomMessageVis是否显示
  6. 显示LoadingScreen
  7. 进入大厅,参数传递:最大玩家数量,server名字,是否enable LAN,显示 Loading Screen后openLevel
  8. 执行Joinserver显示 Loading Screen后joinSession
  9. 调用时销毁游戏进程DestroySessionCaller
  10. 事件NetworkError和TravelError通过宏DisplayErrorMessage显示ErrorDialog窗口
  • PlayerInfo

存储玩家相关信息:姓名,头像,角色,角色头像,当前状态

多人局域网游戏纯蓝图

 

  1. PlayerSaveGame

只包含一个结构体变量

多人局域网游戏纯蓝图

 

二、Character

1、0_Base

重定向动画蓝图

多人局域网游戏纯蓝图多人局域网游戏纯蓝图

2、创建子类蓝图

多人局域网游戏纯蓝图

 

 

三、Gameplay

  • GameplayGM
  1. 事件OnSwapPlayerControllers:保持追踪连接的Player Controller
  2. RespawnPlayer:获取初始位置,摧毁原有Pawn生成新的Pawn,设置Possess
  3. 事件OnLogout:获取GameInfoInstance和GameplayPC,执行Destroy Session Caller
  • GameplayPC
  1. 事件BeginPlay:获取Local Controller,移除所有widget,加载游戏,向Server传递角色信息
  2. PassCharacterInfoToServer(服务器):设置PlayerSettings获取Gamemode重生玩家RespawnPlayer,设置聊天窗口
  3. SetupChatWindow(客户端):创建GameplayChat控件,添加到视口
  4. getChatMessage(服务器):变量存储用户名和要发送的信息,遍历所有的PlayerController更新聊天窗口的信息
  5. UpdateChat(客户端):调用GameplayChatWB,获取GameplayChat,调用UpdateChatwindow
  6. 按键T切换鼠标显隐

四、MainMenu

  • UI

1.MainMenu

多人局域网游戏纯蓝图

 

2.OptionMenu

​​​​​​​多人局域网游戏纯蓝图

 

3.ServerMenu

多人局域网游戏纯蓝图

 

4.HostMenu

多人局域网游戏纯蓝图

 

5.ErrorDialog

多人局域网游戏纯蓝图

 

五、Lobby

  • LobbyGM
  1. RespawnPlayer获取GetControllerPawn存在则销毁,在原位置处生成新的Actor并Possess
  2. EveryoneUpdate:判断当前连接人数大于0,清空connectPlayer,遍历AllPlayercontrollers,Update Number Of Players(LobbyPC);完成后AddPlayerInfo(LobbyPC),UpdateAvailableCharacter(LobbyPC),然后Add to KickedList;完成后判断当前角色是否0_Base,角色改变了Can We Start为真。
  3. Add to KickedList:获取playercontroller,获取LobbymenuWB,获取GameSetting,执行FillPlayersWindow刷新玩家窗口
  4. 事件OnPostLogin:有玩家进入此事件执行,switch has Authority (Authority连接指的是服务器),收集所有的PlayerController存储为AllPlayerController,收集所有的PlayerStart存储为SpawnPoint,获取GameInstance中的ServerName和MaxPlayers,设置大厅,更新大厅,重生玩家
  5. 事件OnLogout:遍历所有controller找到当前controller并移除,相应AvailableCharacters设置为false,移除相应ConnectPlayers,使所有人更新Everyone Update
  6. ServerUpdateGameSetting(服务器):在服务器上设置地图的图标,名称,时间,ID,遍历所有的controller,更新LobbySetting
  7. 剔除:YouHaveBeenKicked(服务器)调用LobbyPC中的Kicked(客户端)
  8. LaunchTheGame:根据GM Map ID开启整型,执行命令行Execute Console Command,命令为servertravel/Game/Maps/Arena01(注意:该命令行的执行应设置为独立窗口运行的情况下,在类默认值中设置Use SeamlessTravel为True)
  • LobbyPC
  1. 初始化:事件BeginPlay,执行Initial Setup
  2. InitialSetup:检查游戏存储信息SaveGameCheck,获取玩家信息后,服务器更新信息Call Update
  3. SaveGameCheck:保存文件存在则先LoadGame然后SaveGame
  4. CallUpdate(在服务器上执行):设置playerSetting,执行角色替换Swap Character(LobbyGM)和EveryoneUpdate(LobbyGM)
  5. AddPlayerInfo(客户端):获取所有连接的玩家,在lobbyMenu界面清空玩家列表ClearPlayerList,更新玩家信息UpdatePlayerWindow
  6. setupLobbyMenu(客户端):创建LobbyMenu窗口显示
  7. UpdateLobbySetting(客户端):更新LobbyMenu的信息图片,名称,时间
  8. ShowLoadingScreen(客户端):去掉LobbyMenu,显示LoadingScreen
  9. UpdateNumberOfPlayers(客户端):更新LobbyMenu中的玩家数量
  10. 断开连接: 服务器断联 Event End Play -destroy Session; 剔除 Kicked(客户端)先打开MainMenu关卡在destroy Session
  11. UpdateAvailableCharacter(客户端):更新角色选择显示,没有选的角色为可选状态
  12. AssignSelectedCharacter(服务器):处理角色选择,决定角色是否可以被分配
  13. CharacterCheck(函数):把当前角色的available characters设置为true,preview的设置为false然后分配角色AssignPlayer
  14. AssignPlayer(客户端):分配角色,保存,callUpdate在所有机器上更新
  15. GetChatMessage(服务器):获取发送文字,发送方名称,遍历所有PlayerController调用UpdateChat事件
  16. UpdateChat(客户端):获取Lobby Menu WB,获取ChatWindow执行UpdateChatWindow
  17. T:切换显示玩家列表和大厅设置界面
  • UI

1.characterSelect

多人局域网游戏纯蓝图

 

2.ConnectedPlayer

多人局域网游戏纯蓝图

 

3.GameSetting

多人局域网游戏纯蓝图

 

4.LobbyMenu

多人局域网游戏纯蓝图

 

5.PlayerButton

多人局域网游戏纯蓝图

 

六、其他

1、ChatUI

  1. ChatText

多人局域网游戏纯蓝图

 

2、ChatWindow

多人局域网游戏纯蓝图

 

3、GameplayChat

多人局域网游戏纯蓝图

 

2、loadingScreen

 

多人局域网游戏纯蓝图

 

附录

DefaultEngine.ini

使用Steam

 

[/Script/Engine.GameEngine]

+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")

 

[OnlineSubsystem]

DefaultPlatformService=Steam

 

[OnlineSubsystemSteam]

bEnabled=true

SteamDevAppId=480

 

[/Script/OnlineSubsystemSteam.SteamNetDriver]

NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"

 

使用LAN

[OnlineSubsystem]

DefaultPlatformService=Null

相关文章:

  • 2022-12-23
  • 2021-09-19
  • 2021-11-19
  • 2021-12-13
  • 2021-12-24
  • 2021-11-10
  • 2021-12-22
  • 2022-01-05
猜你喜欢
  • 2021-12-04
  • 2021-12-17
  • 2021-10-06
  • 2022-12-23
  • 2021-07-09
  • 2021-05-15
  • 2022-12-23
相关资源
相似解决方案