多人局域网游戏纯蓝图
多人局域网游戏学习笔记:
视频网址:
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
- 展示MainMenu,允许鼠标光标
- 保存游戏,分情况显示MainMenu和OptionMenu
- 显示HostMenu
- 显示ServerMenu
- 显示OptionMenu,根据save文件是否存在决定WelcomMessageVis是否显示
- 显示LoadingScreen
- 进入大厅,参数传递:最大玩家数量,server名字,是否enable LAN,显示 Loading Screen后openLevel
- 执行Joinserver显示 Loading Screen后joinSession
- 调用时销毁游戏进程DestroySessionCaller
- 事件NetworkError和TravelError通过宏DisplayErrorMessage显示ErrorDialog窗口
- PlayerInfo
存储玩家相关信息:姓名,头像,角色,角色头像,当前状态
- PlayerSaveGame
只包含一个结构体变量
二、Character
1、0_Base
重定向动画蓝图
2、创建子类蓝图
三、Gameplay
- GameplayGM
- 事件OnSwapPlayerControllers:保持追踪连接的Player Controller
- RespawnPlayer:获取初始位置,摧毁原有Pawn生成新的Pawn,设置Possess
- 事件OnLogout:获取GameInfoInstance和GameplayPC,执行Destroy Session Caller
- GameplayPC
- 事件BeginPlay:获取Local Controller,移除所有widget,加载游戏,向Server传递角色信息
- PassCharacterInfoToServer(服务器):设置PlayerSettings获取Gamemode重生玩家RespawnPlayer,设置聊天窗口
- SetupChatWindow(客户端):创建GameplayChat控件,添加到视口
- getChatMessage(服务器):变量存储用户名和要发送的信息,遍历所有的PlayerController更新聊天窗口的信息
- UpdateChat(客户端):调用GameplayChatWB,获取GameplayChat,调用UpdateChatwindow
- 按键T切换鼠标显隐
四、MainMenu
- UI
1.MainMenu
2.OptionMenu
3.ServerMenu
4.HostMenu
5.ErrorDialog
五、Lobby
- LobbyGM
- RespawnPlayer获取GetControllerPawn存在则销毁,在原位置处生成新的Actor并Possess
- EveryoneUpdate:判断当前连接人数大于0,清空connectPlayer,遍历AllPlayercontrollers,Update Number Of Players(LobbyPC);完成后AddPlayerInfo(LobbyPC),UpdateAvailableCharacter(LobbyPC),然后Add to KickedList;完成后判断当前角色是否0_Base,角色改变了Can We Start为真。
- Add to KickedList:获取playercontroller,获取LobbymenuWB,获取GameSetting,执行FillPlayersWindow刷新玩家窗口
- 事件OnPostLogin:有玩家进入此事件执行,switch has Authority (Authority连接指的是服务器),收集所有的PlayerController存储为AllPlayerController,收集所有的PlayerStart存储为SpawnPoint,获取GameInstance中的ServerName和MaxPlayers,设置大厅,更新大厅,重生玩家
- 事件OnLogout:遍历所有controller找到当前controller并移除,相应AvailableCharacters设置为false,移除相应ConnectPlayers,使所有人更新Everyone Update
- ServerUpdateGameSetting(服务器):在服务器上设置地图的图标,名称,时间,ID,遍历所有的controller,更新LobbySetting
- 剔除:YouHaveBeenKicked(服务器)调用LobbyPC中的Kicked(客户端)
- LaunchTheGame:根据GM Map ID开启整型,执行命令行Execute Console Command,命令为servertravel/Game/Maps/Arena01(注意:该命令行的执行应设置为独立窗口运行的情况下,在类默认值中设置Use SeamlessTravel为True)
- LobbyPC
- 初始化:事件BeginPlay,执行Initial Setup
- InitialSetup:检查游戏存储信息SaveGameCheck,获取玩家信息后,服务器更新信息Call Update
- SaveGameCheck:保存文件存在则先LoadGame然后SaveGame
- CallUpdate(在服务器上执行):设置playerSetting,执行角色替换Swap Character(LobbyGM)和EveryoneUpdate(LobbyGM)
- AddPlayerInfo(客户端):获取所有连接的玩家,在lobbyMenu界面清空玩家列表ClearPlayerList,更新玩家信息UpdatePlayerWindow
- setupLobbyMenu(客户端):创建LobbyMenu窗口显示
- UpdateLobbySetting(客户端):更新LobbyMenu的信息图片,名称,时间
- ShowLoadingScreen(客户端):去掉LobbyMenu,显示LoadingScreen
- UpdateNumberOfPlayers(客户端):更新LobbyMenu中的玩家数量
- 断开连接: 服务器断联 Event End Play -destroy Session; 剔除 Kicked(客户端)先打开MainMenu关卡在destroy Session
- UpdateAvailableCharacter(客户端):更新角色选择显示,没有选的角色为可选状态
- AssignSelectedCharacter(服务器):处理角色选择,决定角色是否可以被分配
- CharacterCheck(函数):把当前角色的available characters设置为true,preview的设置为false然后分配角色AssignPlayer
- AssignPlayer(客户端):分配角色,保存,callUpdate在所有机器上更新
- GetChatMessage(服务器):获取发送文字,发送方名称,遍历所有PlayerController调用UpdateChat事件
- UpdateChat(客户端):获取Lobby Menu WB,获取ChatWindow执行UpdateChatWindow
- T:切换显示玩家列表和大厅设置界面
- UI
1.characterSelect
2.ConnectedPlayer
3.GameSetting
4.LobbyMenu
5.PlayerButton
六、其他
1、ChatUI
- 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
多人局域网游戏纯蓝图相关推荐
- UE4之多人局域网游戏中GameMode/PlayerController/Pawn/Character/GameInstance/GameState/PlayState 6个类的生成情况和生成个数
注:本文所有的讨论是在以 "监听服务器的模式" 为前提下得出的. 若是独立服务器模式,那么本文得出的结论可能会不成立. 开篇先放一张图: 由上面那张图思考如下: 如果 ...
- 关于UE4多人局域网联机游戏中联网和回放的设置细节问题
背景 我们在游戏开发.仿真推演中可能会遇到这样的需求: 要搭建局域网,可以多人对战的. 要可以回放,能把大家玩耍的过程记录下来,重放给玩家们看,做复盘. 于是我们需要开发[联网]和[回放]功能.联网使 ...
- 多人联机游戏中联网模块(Socket)的设计和各种问题解决
这是我自己做的一个多人联机游戏中网络部分的总结.全部为自己全新做的,没用开源软件(有一个网络游戏开源软件Raknet).目的是写一个属于自己的可靠网络模块,修改.扩展后在很多地方都能用得着.也想自己从 ...
- UE4之制作局域网游戏
首先需要改一下配置文件 Config里的DefaultEngine.ini 添加一行代码 [OnlineSubsystem] DefaultPlatformService=<Default Pl ...
- 快节奏多人在线游戏网络入门系列教程(1):简介
简介 该系列教程主要讨论快节奏多人在线游戏的网络相关的技术和算法.这是该系列教程的第一章,如果你对多人在线游戏有一定了解,可以跳过本章. 开发任何一款游戏都是一个挑战性的任务.而多人在线游戏增加了更多 ...
- 我亲眼看到一群人通过游戏推广翻身,推广游戏的主播成为亿级大佬
我是亲眼看着一大票人逆袭翻身,一跃成为亿级大佬.我身边的男人基本都是想做这个翻身的.关键这模式还是没有什么门槛的.通过游戏推广公会,手游推广,手游Cps翻身,可以说是逆袭中的传奇人物.很多业内人士肯定 ...
- Snake贪吃蛇小游戏纯js代码
Snake贪吃蛇小游戏纯js代码 先给个效果图,一样的简单而又纯朴,回归贪吃蛇最原始的状态 还是先分析一下,使用面向对象编程真的降低了编程的难度(只要前期把思路想好,各个类,属性,方法抽象出来),就真 ...
- phaser.min.js_如何使用Phaser 3,Express和Socket.IO构建多人纸牌游戏
phaser.min.js I'm a tabletop game developer, and am continually looking for ways to digitize game ex ...
- 多人VR游戏或成未来VR游戏发展的爆点
VR游戏体验那么多,为什么说多人制VR游戏会成为VR游戏爆发的关键点? 之前我们统计了Steam上好评最高以及用户数量最多的VR游戏,其中Valve发行的<The Lab>夺得双冠.这个结 ...
最新文章
- 《团队项目开发之三对一维环形数组的求解》
- dataframe for 循环 数据格式 python_Python中的for循环
- aac蓝牙编解码协议_蓝牙音频编码哪个音质好?今天我们来逐一解读
- Java开发面试题,Spring面试题整理(1)
- 无线网桥的特点及应用方案
- 【转载】这次拆库 应是微服务化的拆分方式
- 为了在简历上写掌握【Java多线程和并发编程】,做了两万字总结
- 可替代的C语言开发环境
- JAVA win10 JDK环境配置(内含JDK,eclipse安装包)
- Music Radio Beta-Perview 1.0.0.0.(做了一个听音乐电台的东东.:)
- 安恒信息明御WEB应用防火墙产品白皮书
- m227fdw恢复出厂设置_惠普M227fdw说明书
- 大气化学实验卫星 ACE-FTS(SCISAT) 相关介绍
- 系统集成项目管理工程师英语题翻译
- 气候变化对深圳的影响
- 现代办公的新选择,讯飞智能录音笔SR302 Pro
- QT210 自制bootloader 移植kernel3.4.2 制作ramdisk busybox1.20.2
- 微信小程序选项卡数组列表单项选择切换效果
- How to Generate PDF in Ruby on Rails(HowtoGeneratePDFs) ZT
- Ubuntu 搭建小熊派 hi3861 环境
热门文章
- vs2019编译zlib全过程
- vs2019 android,VS2019无法安装Android SDK 28的问题
- 发动机冷却系统的控制论文综述
- 【网络流量识别】【深度学习】【四】DNN、GBT和RF—利用大数据和深度学习技术进行入侵检测
- 内网中设备通过一台主机做端口转发联通外网( TPLink路由映射,端口转发,windows自带端口转发netsh interface portproxy)
- MATLAB在线编辑器online
- 软件安全测试有哪些方法?
- 织梦 plus/download.php,织梦DedeCMS 5.7SP1 /plus/download.php url重定向漏洞的解决方法
- LiFi 真的可以取代 Wi-Fi 吗?
- 《测试架构师的修炼之道》七—测试策略实战