做移动网站快速,外贸生意怎么入手,宁津 做网站,酷站网Puzzle 拼图游戏目录 UE5 游戏模板 —— Puzzle 拼图游戏1、GameMode核心任务流程 2、PlayerController核心职责简单来说 3、游戏中的Actor拼图块拼图管理器 4、Pawn UE5 游戏模板 —— Puzzle 拼图游戏
Puzzle 作为最简单的UE提供的模板项目#xff0c;开始我们第一个UE项… Puzzle 拼图游戏目录 UE5 游戏模板 —— Puzzle 拼图游戏1、GameMode核心任务流程 2、PlayerController核心职责简单来说 3、游戏中的Actor拼图块拼图管理器 4、Pawn UE5 游戏模板 —— Puzzle 拼图游戏
Puzzle 作为最简单的UE提供的模板项目开始我们第一个UE项目的学习
1、GameMode
GameMode在网络游戏中只会在服务端存在服务端权威。 而在单机游戏或p2p这种本地既是服务器又是客户端的情况客户端也会存在。
虚幻引擎的架构设计是统一的无论单机还是多人游戏都共享同一套底层框架
核心任务流程
1.定义游戏规则和流程 (Primary Game Rules Flow):
这是GameMode最核心的任务。 开始游戏(BeginPlay/StartMatch): 决定游戏何时正式开始例如等待玩家准备完毕倒计时结束。 进行游戏(InProgress): 管理游戏过程中的规则和主要状态。 结束游戏(EndMatch): 决定游戏何时以及为何结束例如时间耗尽、玩家达成目标、所有玩家失败。 处理胜负/结果(HandleMatchHasEnded): 根据自定义逻辑如分数、存活状态、任务完成度判断哪一方玩家、队伍获胜或游戏结果并处理结算逻辑。 重新开始游戏(ResetLevel / RestartGame): 控制一轮结束后如何重置游戏状态让玩家重新开始。
2.设置和初始化默认 Actor (Default Actor Setup):
默认 Pawn 类 (DefaultPawnClass): 指定玩家出生时控制的默认角色类型如人类角色、载具。 玩家控制器类 (PlayerControllerClass): 指定玩家控制器类处理玩家输入和玩家逻辑。 游戏状态类 (GameStateClass): 指定GameState类用于在服务器和所有客户端之间同步游戏的整体状态信息如游戏阶段、得分、剩余时间。GameMode负责创建和管理GameState实例。 HUD 类 (HUDClass): 指定用于绘制游戏内 UI 的 HUD 类注意通常在 PlayerController 中具体处理。 旁观者类 (SpectatorClass): 指定玩家在旁观模式下使用的 Pawn 类型。
3.管理玩家登录/登出 (Player Login/Logout):
PlayerController实例的创建。 PlayerState实例的创建和管理用于同步单个玩家的状态如名称、分数。 Pawn的初始生成当玩家加入游戏时GameMode负责调用SpawnDefaultPawnFor或自定义逻辑生成玩家的初始角色。 处理玩家退出时的清理工作销毁对应的PlayerController、PlayerState、Pawn。
4.生成点管理 (Spawn Points):
选择玩家出生位置: GameMode通常通过调用FindPlayerStart函数来决定玩家生成在哪个PlayerStart(重生点)上。你可以重写此函数来实现自定义的出生点选择逻辑如团队区分、避免重生在敌人眼前、随机选择等。 生成玩家 Pawn: 如上所述在玩家登录或重生时负责实际创建玩家Pawn的实例。
5.多人游戏特定规则 (Multiplayer):
定义最大玩家数 (MaxPlayers): 设置服务器允许的最大玩家数量。 等待玩家连接 (bDelayedStart): 控制是否在达到最小玩家人数或等待时间结束前才开始游戏。 无缝旅行(Sesamless Travel)管理: 处理地图切换时的玩家状态保存和恢复逻辑。
6.配置游戏参数 (Game Configuration):
可以通过GameMode类的属性或蓝图来配置各种游戏参数如每回合时长、初始生命值、分数规则、是否允许暂停、团队设置等。这些参数可以影响GameState中同步的数据或GameMode本身的规则逻辑。
7.蓝图扩展和事件绑定 (Blueprint Extensibility):
虽然核心逻辑在C中定义但GameMode及其子类通常暴露给蓝图允许设计师和程序员在蓝图中更便捷地 覆盖关键虚拟函数如HandleStartingNewPlayer, PostLogin, Logout, Killed。 响应引擎发出的事件如OnMatchStateSet当游戏阶段改变时。 调用自定义函数来实现游戏特定的规则。 访问和修改GameState中的同步数据。
在实际的Puzzle Game中我们指定了默认的Pawn和PlayerController
这种指定的优势是直接用了C的类型去指定很快捷但是这种指定缺少了可拓展性我们通常使用派生自C的子类蓝图去指定 这种方式通常比上面的方式好一些可以指定派生类蓝图
2、PlayerController
PlayerController是个关键类尤其在处理玩家输入和客户端逻辑方面。需要区分单机和多人模式下的不同职责在多人游戏中PlayerController实例会同时存在于服务器和客户端这点和GameMode很不同。
核心职责
1. 输入处理
接收玩家输入键盘、鼠标、手柄等转化为游戏内的操作指令移动、跳跃、射击等。通过重写 SetupInputComponent() 绑定输入事件。
void AMyPlayerController::SetupInputComponent() {Super::SetupInputComponent();InputComponent-BindAxis(MoveForward, this, AMyPlayerController::MoveForward);InputComponent-BindAction(Fire, IE_Pressed, this, AMyPlayerController::HandleFire);
}2. 视角控制
管理玩家摄像机如第一/第三人称视角切换、镜头旋转。通过 SetViewTarget() 动态切换摄像机目标如过场动画切镜头。
3. 视角控制
通过 Possess() 控制特定Pawn角色/载具
APlayerController* PC GetWorld()-GetFirstPlayerController();
PC-Possess(MyCharacter); // 接管角色控制权死亡后通过 GameMode 调用 RestartPlayer() 重新生成并接管新Pawn。
4. 用户界面管理
创建并管理HUD抬头显示器、UMG控件如菜单、血条。示例显示交互提示
void AMyPlayerController::ShowInteractionPrompt(FString Text) {if (InteractionWidget) InteractionWidget-SetPromptText(Text);
}5. 多人游戏网络同步
客户端Client发送输入指令到服务器。服务器Server验证并执行指令防作弊。使用RPC远程过程调用同步操作。
// 客户端调用RPC在服务器执行
UFUNCTION(Server, Reliable)
void Server_RequestShoot();简单来说 回到项目中是这样的在构造函数中初始了鼠标和点击事件 bEnableClickEvents true; bEnableTouchEvents true; 这两个设置为true主要目的是下图中的绑定点击事件
3、游戏中的Actor
拼图块
在拼图块的构造函数中主要进行了资源的静态加载和创建组件对组件进行初始化数值 其余的函数主要是设置点击后的材质切换注意这里的材质需要加上UPROPERTY 是因为避免材质被主动释放加上属性宏标签防止释放。这里还有一个细节为什么一个是UMaterial 其余的是UMaterialInstance 是因为UMaterialInstance是材质实例是由UMaterial转换过来的只需要修改颜色值即可。 拼图管理器
用于创建管理拼图块
4、Pawn
Pawn可以是人、动物、NPC、等… … Pawn 自然有些游戏行为去操纵在PuzzleGame这个例子中的输入都由Pawn进行在Pawn中主要是发射射线检测碰撞。 DeprojectMousePositionToWorld 函数将鼠标的位置转换成世界坐标返回世界坐标和方向我们根据这两个值计算出终点值进行射线检测碰撞 顺带说一下UE的旧版Input系统的赋值后续的FirstPersonGame会说新版的输入系统