[UE笔记]杂项1

LAN下多人游戏关卡

在这里插入图片描述
Open Leve(by name)节点指定打开Lobby关卡,选项是listen(作为监听服务器)

另一台电脑的运行实例通过执行控制台指令或者英文Execute Console Command节点并使用Open <adress>连接对应地址下的游戏服务器以进行多人游戏。


另一种方法是:

XXXCharacter.h下
在这里插入图片描述
相应cpp文件下:

服务端调用的是第一个
在这里插入图片描述
其他玩家调用第二个或第三个
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当然,这里关卡在OpenLobby中被硬编码了。

文件路径

以一个level文件地址为例

D:/UnrealProject/MPTest/Content/ThirdPerson/Maps/ThirdPersonMap.umap

Content文件夹之前的内容可以用game代替,即

/game/ThirdPerson/Maps/ThirdPersonMap.umap


例如对服务端使用UWorld::ServerTravel时,就可以有

UWorld* World = GetWorld();
if(World){
	World->ServerTravel("/game/ThirdPerson/Maps/ThirdPersonMap?listen");
}

不用扩展名是因为已经默认是umap文件,另外附加参数listen?连在后面(即被指定为监听服务器)

UFUNCTION宏

可利用函数说明符将UFunction对蓝图可视化脚本图表公开,以便开发者从蓝图资源调用或扩展UFunction,而无需更改C++代码。

UFunction的官方文档

使用方式如下

UFUNCTION(BlueprintCallable)
void function(1);

BlueprintCallable就是其中一种传入参数(传入的参数见上方链接文档),表示此函数可在蓝图或关卡蓝图图表中执行。

在线子系统

整体逻辑

启用在线子系统(以steam为例)

官方OnlineSubsystemSteam文档

在这里插入图片描述
编辑->插件中搜索启用相关平台即可(上图是steam平台)

然后将之加入到Bulid文件里(项目名.Build.cs这个文件)

//原先
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay" });
//改为
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "OnlineSubsystemSteam", "OnlineSubsystem" });

找到项目文件夹下的\Config\DefaultEngine.ini

添加如下内容

[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")

[OnlineSubsystem]
DefaultPlatformService=Steam

[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480

; If using Sessions
; bInitServerOnClient=true

[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"

正式使用需要申请自己的SteamDevAppId。480是steam的一个项目叫做space war

重新生成文件前应当删除已有的,即下图选中的三个
在这里插入图片描述
随后右键.uproject文件并选择下图选项,得到IntermediateSaved文件夹

在这里插入图片描述
然后双击打开该文件(即启动项目),提示点击“是”,得到Binaries文件夹
在这里插入图片描述

代码

暂略

使用委托

  1. (通常在头文件中)声明委托变量
  2. 初始化委托(用到的类构造函数中)
  3. 实现了CreateUObject函数的类可以通过对一个UObject的引用来初始化委托(简言之就是委托引用了委托对象)
  4. 一般CreateUObject函数需要传入user calss和回调函数。这是委托需要的最基本的东西。
  5. 使用之前使用函数(该函数特征是前缀Add和后缀_HandleAddOnFindSessionCompleteDelegate_Handle)将委托添加到委托列表。
  6. 第5条中的函数返回FDelegateHandle类型的对象,存储有相应类型委托的句柄

在这里插入图片描述

UE项目

UE项目本身就是一个模块,模块是UE引擎的基本构成,每个模块都有自己的Build.cs文件。

UE项目使用插件时会将插件添加到.uproject项目文件中。其中有Plugins部分,节选如下

"Plugins": [
		{
			"Name": "ModelingToolsEditorMode",
			"Enabled": true,
			"TargetAllowList": [
				"Editor"
			]
		},
		{
			"Name": "Bridge",
			"Enabled": true,
			"SupportedTargetPlatforms": [
				"Win64",
				"Mac",
				"Linux"
			]
		},
		{
			"Name": "OnlineSubsystemSteam",
			"Enabled": true
		}
	]

插件本身也可以包含其他插件,相应的包含关系将被添加到.uplugin文件中。

UE支持模块和插件的相互依赖,但是具有先后顺序,比如引擎模块不能依赖游戏模块,但是游戏模块可以依赖引擎模块。因为即使没有任何项目引擎模块也可以被构建

在这里插入图片描述
引擎插件可以在解决方案资源管理器下找到,每个插件都包含一个或多个模块

在这里插入图片描述

子系统

在这里插入图片描述

Game Mode & Game State

在这里插入图片描述
UE有GAME MODE BASE这个基类来实现game mode。他里面就有GameState这个变量。GameState被包装在TObjectPtr<AGameStatebase>

Game State:客户端可以访问。用于保存游戏状态信息(而不是玩家状态),比如分数、胜利次数。保存有一个玩家状态数组。

实现game mode可能需要重写下面两个函数

  • PostLogin是一个继承的虚拟函数,每当玩家加入游戏时就会被调用
  • Logout函数则在玩家离开游戏时调用

gamemode一般存在于主机,不存在于客户端

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值