在使用UE4开发Android时,有时需要获取平台相关的信息、或者执行平台相关的操作,在这种情况下,需要在代码中添加Java的代码以及在C++中调用它们。有些需求也需要在游戏中从Java侧接收一些事件,需要处理Java调用C++的流程。
本篇文章主要涉及以下几部分内容:
- UE工程中添加Java代码
- Java函数的签名规则
- Java调用C++的函数
- C++调用Java的函数
如何利用UE的UPL特性、Java的签名规则,以及在UE中进行JNI调用实现方法,会在文章中做详细的介绍。
在使用UE4开发Android时,有时需要获取平台相关的信息、或者执行平台相关的操作,在这种情况下,需要在代码中添加Java的代码以及在C++中调用它们。有些需求也需要在游戏中从Java侧接收一些事件,需要处理Java调用C++的流程。
本篇文章主要涉及以下几部分内容:
如何利用UE的UPL特性、Java的签名规则,以及在UE中进行JNI调用实现方法,会在文章中做详细的介绍。
Hook是一种机制,通过拦截和勾取一些事件来实现自己需求的方式。不同于传统的底层Hook,本篇文章主要介绍在UE中如何使用类似Hook的这种机制来实现业务需求。
有些需求是要全局地修改某个类的所有对象,比如在UI中为某种类型的的Button播放统一的音效,如果在每个控件都需要监听它的OnClicked再去播放音效,会有大量的重复操作。所以,我想要找一种全局的方法,可以监听所有UButton的点击事件,然后统一来处理。再或者想要控制一个在蓝图中不可见的属性,如果只是一些简单的需求就要去修改引擎的代码,有点得不偿失。
可以通过UE的反射机制来实现这些需求,本篇文章来提供一种思路,做一个简单的实现分析。
通常,UE4开发者获取UE4引擎的方式有两种:
从EpicGamesLauncher安装的是公版引擎,不能修改代码重新编译,可以在根据选择安装支持的平台、调试符号等。
自己从Github上Clone代码进行编译的则是源码版引擎,有些功能只能在源码版中使用(比如Standalone Application),但是如果在项目中修改了引擎的代码,导致每个人都需要Clone一遍源码编译一遍引擎,这个过程十分耗时,而且源码版引擎的占用的磁盘空间十分巨大,达到上百G。在当需要把引擎部署到多台构建机时,编译引擎的时间和空间是冗余的,所以需要通过一台机器编译引擎,然后其他的机器只需要拉取编译后的引擎即可,实现与安装版引擎一样的行为。
本篇文章主要介绍BuildGraph的工作流程,以及对引擎默认构建脚本InstalledEngineBuild.xml
的分析;如何使用BuildGraph从源码配置、编译并导出支持Android/IOS打包的二进制引擎、以及如何裁剪和加速整个的构建流程。
在开发游戏时,会使用到大量的图片资源,使用图集的作用在于减少 DrawCall,提高性能。在UE中没有图集的打包工具,比较流行的方案是使用第三方的图集打包工具TexturePacker。新版本的TexturePacker支持直接导出UE4的Sprite,并且可以在引擎中直接导入。在之前的版本中可以使用VaTexAtlas通过Json Array的数据导入,不过与TexturePacker直接导出UE的Sprite相比,VaTexAtlas并没有优势,UE的Sprite还可以直接预览,VaTexAtlas则不可以,在官方已经支持的情况下不建议再使用VaTexAtlas作为UE导入图集的方式。
本篇文章主要内容是记录TexturePacker图集生成文件的分析、导入UE、选项介绍、以及记录在UE中使用遇到的问题。
游戏热更新是在玩家不重新安装游戏的前提下获取最新游戏内容的方式,在PC和移动端的网络游戏中有很多应用,因为游戏上上线后要快速调整、修复bug、更新内容等等。如果每修改一点点内容都需要玩家去AppStore更新应用,甚至去网站手动下载再安装,而且不同的平台对于游戏的审核规则和反馈时间也不一致,运营也会疯掉。
在其他引擎中的热更应该有比较成熟的方案,但是在UE里还没看到有比较全面的文章来讲UE4的热更实现的文章,恰好之前分析和实现了UE4热更的内容,准备写两篇文章来记录一下思路和实现方案,并会实现一个可以运行的Demo,希望能对有需要的朋友一点帮助。
为了方便地统一收集和管理热更新和HotPatcher常见的问题与解决方案,我新建了一篇文章来记录和整理:UE4热更新:Questions & Answers,遇到问题可以先去看这个FAQ页面。