UE4学习-游戏退出、游戏打包

密室逃脱游戏退出

之前老师讲的给pawn设置重量,这样子解决一直漂浮在空中的问题。可是出现了另一个问题,就是密室门打开以后,pawn出门以后就会一直往下掉。离房子越来越远,且无法操作。这样子体验不太好。
所以我这里想的是,pawn出门以后,游戏就退出了。

最开始想的是检测pawn穿过门,触发退出。不知道怎么写。后来就只能使用目前只会用的一种方式,把体积触发器放置的门外,距离不要太远,一出门就触发。
至于不放在门内,是因为pawn在灯光那里触发了开门,然后快速冲刺,如果退出触发器在门内,是可能会触及到触发器的,然后游戏就退出了。

这里顺带提一下,如何降低pawn的速度呢,我这里讲其中一种方法,在我们给pawn设置质量的那里,设置一个线性阻尼,我设置的0.5,快速移动,也到不了门外。大家可以自己试验一下,选择自己需要的一个值。

设置如图:

在这里插入图片描述

我在门外,再添加了一个体积触发器,trigger Volume,通过pawn出门,进入触发器范围,触发退出程序。

在这里插入图片描述
这里添加了体积触发器。

opendoor的代码中也进行了修改,定义了一个triggVol变量,通过这个变量来和门外的触发器关联。
在这里插入图片描述


	if (triggVol && triggVol->IsOverlappingActor(pawn))
	{
		UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
	}


4.25的虚幻引擎,程序退出和之前的有点不一样,多了最后一个参数,true代表立即退出。

退出代码为:

UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);

需要包含的头文件为:

#include <Kismet/KismetSystemLibrary.h>

网上的包含的头文件位置和4.25的不一样,我这个是自己亲测可用的噢。

时间轴单独显示比例

之前不知道时间轴如何单独显示比例,不管几个轴,都是同步的,这样子设置并不方便,今天通过研究发现,取消勾选同步视图以后,就能单独对每个轴进行比例所发,查看。

如图:

在这里插入图片描述

UE4 程序打包

其实虚幻程序打包有一个很简单的方法:

文件-打包项目-Windows(64-bit),选择文件夹,然后等待就好。

在这里插入图片描述

等待的过程中可以把输出日志窗口显示出来,方便查看进度。

显示方法:

窗口-开发者工具-输出日志
在这里插入图片描述

使用蓝图退出游戏

使用蓝图退出游戏也是比较简单的方式。

要退出的事件,连接退出游戏(Quit Game),就能触发游戏的退出。和在代码中使用UKismetSystemLibrary::QuitGame是一样的。

在这里插入图片描述

疑问

我这里有个疑问,我UKismetSystemLibrary::QuitGame的调用,第一个参数使用的GetWorld(),这样子使用有没有问题呢,是否可以使用其他参数,如果有清楚的小伙伴可以给我留言噢。大家一起讨论一下呢。

### Unreal Engine 打包时遇到的堆栈溢出异常解决方案 当在 Unreal Engine 中打包项目时遇到 `EXCEPTION_STACK_OVERFLOW` 错误,通常意味着某个函数调用链过深或存在无限递归的情况。此类错误可能由多种原因引起,包括但不限于复杂的蓝图逻辑、过多的事件监听器或是某些特定配置不当。 #### 1. 检查并优化蓝图脚本 如果项目大量依赖于蓝图进行开发,则应仔细审查所有涉及复杂计算或循环操作的部分。特别注意那些可能导致深层嵌套调用的情形,比如反复触发同一节点或形成闭环引用[^1]。 对于已知容易引发问题的功能模块,考虑将其转换成 C++ 实现来提高效率和稳定性。C++ 编写的代码往往能更好地控制资源分配与释放过程,在处理大规模数据集时表现更佳。 #### 2. 调整编译设置 有时适当调整项目的构建参数也能有效缓解此现象: - **减少内联函数数量**:通过修改 `.uproject` 文件中的 `[BuildSettings]bForceIncludeAllModules=false` 来防止不必要的模块被加载入内存; - **启用调试信息**:虽然这会增加最终可执行文件大小,但在排查阶段非常有用。可以在编辑器中依次点击“编辑->项目设置->打包”,找到“高级选项卡”下的“始终生成调试信息”。 上述措施有助于定位具体哪个部分消耗了过多栈空间从而导致崩溃发生[^2]。 #### 3. 修改引擎源码(仅限有经验开发者) 针对极少数情况下即使经过充分优化仍无法解决问题的现象,可以尝试深入研究官方提供的修复补丁或者社区贡献者提交的相关改进提案。例如,有关如何修正切换控制器期间输入持续回调 Bug 的讨论就提供了宝贵的经验借鉴[^3]。 值得注意的是,直接改动 UE4 引擎核心组件需谨慎行事,并确保每次变更都经过严格测试验证其安全性及兼容性。 ```cpp // 示例:假设发现某处存在潜在风险的递归算法 void SafeRecursiveFunction(int depthLimit) { static int currentDepth = 0; if (++currentDepth >= depthLimit || /*其他终止条件*/) { // 达到最大深度或其他退出标准即返回 --currentDepth; return ; } // 正常业务逻辑... SafeRecursiveFunction(depthLimit); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值