unreal vs 生成安卓_unreal c++ 生成button - CSDN
精华内容
参与话题
  • UE4虚幻引擎开发手机游戏

    万次阅读 2017-05-11 15:04:32
    该文章来自用户转载 点击阅读原文 UE4虚幻引擎作为游戏开发引擎之一,在很多项目中都会使用到。下面就给大家分享下如何使用UE4开发高品质的手机游戏。 作者介绍 ...当前市场上使用

    该文章来自用户转载 点击阅读原文

    UE4虚幻引擎作为游戏开发引擎之一,在很多项目中都会使用到。下面就给大家分享下如何使用UE4开发高品质的手机游戏。

    UE4虚幻引擎开发手机游戏(一)

    作者介绍


    UE4虚幻引擎开发手机游戏(一)

    大纲

    •介绍
    •UE4 针对3A级手游的渲染管线和特征集
    •使用ES3.1, Vulkan, Metal Api的高端机图形处理讲解
    •即将发布的UE4移动平台特性
    UE4虚幻引擎开发手机游戏(一)

    介绍

    当前市场上使用UE4开发手游的情况

    •有许多已经发布的和正在使用UE4开发的手游, 品质相当高
    •开放世界的MMO已经可以在手机上流畅运行
    2016年发布的高品质游戏《天堂II 革命》
    UE4虚幻引擎开发手机游戏(一)

    天堂II 革命

    •移动平台的开放世界MMO
    •拉高移动平台品质(Sad。。。)
    •巨大的成功(月流水1.76亿美元)
    UE4虚幻引擎开发手机游戏(一)

    天堂II 革命

    Netmarble Games(网石游戏)使用标准的UE4特性进行该游戏的开发

    •开发, 测试和调试都在PC上完成
    •UE4 移动渲染器
    •移动HDR, 后处理
    •无缝地图
    •LevelStreaming(UE4的关卡组织方式,不翻译了)
    •材质
    •使用BP(蓝图)制作的UI
    •扩充性良好的设备适配
    •最低配置:GalaxyS4,Iphone5
    UE4虚幻引擎开发手机游戏(一)

    UE4 移动平台渲染器

    UE4虚幻引擎开发手机游戏(一)

    UE4渲染器

    UE4拥有3个不同的渲染器

    •延时渲染器(DeferredRenderer)
    •编辑器, PC和主机的默认渲染器
    •需求SM4, SM5 特性集(FeatureLevel, UE4定义硬件平台特性的方式,不同FeatureLevel对应不同的硬件平台特性)
    •前向VR渲染器(实际上是专门为VR增加的Forward+渲染器,后续也慢慢用作手机的高端渲染器)
    •最早用于Epic开发的VR游戏 《Rebo Recall》,这样可以直接支持MSAA抗锯齿(延时渲染对抗锯齿的支持非常不友好, VR游戏对抗锯齿又有较高要求)
    •拥有跟延时渲染类似的特性(可以支持较多的动态灯光),然后也与延时渲染存在一些小的差异(比如屏幕空间效果)
    •需求SM5特性集(其实就Forest引擎的移植版来说,用Cpu代替cs对物体的光照集进行剔除,在较早期的移动平台也可以支持该渲染器)
    •移动渲染器(其实就是经典的Forward渲染器)
    •一般是移动平台使用(其实也有部分追求高帧率的游戏使用该方式,在对场景做静态烘焙后, 游戏品质也可以达到水准之上)
    •前向渲染(对物体进行绘制的同时计算光照,所以灯光数越多, 系统压力越大)
    •对光照和阴影的支持比前面两个渲染器差很多
    •需求“ES2”,“ES3_1”特性集

    UE4虚幻引擎开发手机游戏(一)

    特性集

    •UE4可以在多个特性集之间进行切换,特性集会决定材质编辑器支持的Shader特性。
    •特性集同样检测可用的UE4渲染器。
    •“ES2”和“ES3_1”命名的特性集并非严格对应OpenGLES2 和 OpenGL ES3 的API集合
    •ES2渲染器会在可能的情况下使用ES3的特性。
    •材质切换节点(FeatureLevel Switch)可以在材质中使用
    UE4虚幻引擎开发手机游戏(一)

    特性集介绍
    •ES2
    •Mobile渲染器
    •对应OpenGLES2.0-3.x(Android平台)       OpenGL ES2.0(iOS平台,支持ES3.0的IOS平台已经能够支持metal, 所以直接使用metal渲染器)
    •支持最大8个纹理单元
    •Android平台:

     ES3.0扩展的支持
    Fallback到32位RenderTarget

    UE4虚幻引擎开发手机游戏(一)

    特性集介绍

    ES3_1高端Mobile特性集

    •Mobile渲染器

    •OpenGLES 3.1(Android平台) Vulkan(Android平台, Android7.0) Metal(iOS平台)

    •最大16层纹理单元支持

    •浮点RenderTarget支持

    •VertexTextures Fetch支持

    •sRGB支持(可以支持硬件Gamma校正,但此处一般使用更简化的Shader计算代替,方便统一低配与高配机的效果)

    UE4虚幻引擎开发手机游戏(一)

    特性集介绍

    •SM4

    •延时渲染器

    •Direct3D10OpenGL3.0 Metal支持

    •最大16层纹理单元

    •支持延时渲染的最低特性集

     UE4虚幻引擎开发手机游戏(一)

    特性集介绍
    •SM5
    •延时或者前向VR渲染器(Forward+)
    •Direct3D11, OpenGL4.0, Playstation 4, XboxOne, Metal, GLES3.1 +AEP
    •16+纹理单元支持
    •支持Tessellation(曲面细分)的最低特性集,可以利用Compute Shader完成一些高级渲染特性支持。

    UE4虚幻引擎开发手机游戏(一)

    特性集(Android)

    打开黄框选中的特性可以让UE4生成ES3_1特性集使用的Shader

    •UE4在对应设备执行时会自动选择最匹配的RHI(抽象硬件接口)和特性集

    •这些配置可以被设备配置重写

    UE4虚幻引擎开发手机游戏(一)

    Android Vulkan介绍

    Vulkan是虾米?

    •用来取代OpenGL和OpenGLES的次世代的渲染Api。

    •由工业派设计,克拉魔发起。

    •专为下一代硬件设计。

    支持Vulkan的UE4(Android平台, iOS官方标配是Metal, 不支持Vulkan)

    •运行Android7.0的设备现在自带一个可工作的Vulkan驱动。

    •轻量级的Api, 最小化Cpu开销。

    •“PipelineState Objects”带来高效的渲染状态切换。

    •更多的渲染批次,因为每个渲染批次更轻量化

    •???大意应该是按“RenderPass”组织方式带来更高效的Gpu硬件利用率(字被人挡住了。。。)

     

    UE4虚幻引擎开发手机游戏(一)

    这里是Epic官方的Vulkan示例(可以自行查阅相关视频)

    UE4虚幻引擎开发手机游戏(一)

    颜色缓冲区(HDR模式)

    对比延时渲染器, UE4移动渲染器使用一个前向渲染器, 仅输出颜色,而不是使用Gbuffer。

    •场景颜色

    •理想的情况在支持的设备上使用16位浮点RenderTarget。

    •不支持的情况使用“ RGBE 编码”或者“马赛克”模式(??Whatis “mosaic”mode???)。

    •在渲染过程中RGB存储HDR颜色值。

    •Alpha通道用来存储后续会使用到的深度值(软粒子,贴花)。

    •深度缓冲区

    •通常使用24位深度,8位模板的模式。

    •后备缓冲区

    •32位RGBA。

    •存储后处理和Tonemapping后的最终结果。

    UE4虚幻引擎开发手机游戏(一)

    RGBE HDR 编码

    RGB + 指数 的编码方式需要被低端移动设备使用(运行Android5.X的GalaxyS6/Note4等)

    •需要 EXT_shader_framebuffer_fetch的扩展(该扩展在GalaxyS6上可用)

    •支持full HDR, bloom 而且没有分辨率限制。

    从图中可以看到Native HDR和“Encoding” HDR的实现基本没有区别

     UE4虚幻引擎开发手机游戏(一)

    颜色缓冲区(LDR 模式)

    •32位硬件后备缓冲区 & 深度缓冲区

    •系统分配(比如Android上的EGL)

    •许多移动设备并不支持sRGB

    •场景在Gamma空间中被直接渲染到后备缓冲区,随后透明物体和UI也被直接渲染到后备缓冲区

    •最快的渲染方式(一般给简单游戏或者VR游戏使用)

    UE4虚幻引擎开发手机游戏(一)

    移动平台渲染管线

    1.视口建立

    2.GPU粒子模拟

    3.渲染阴影图

    4.基础Pass渲染

    5.贴花处理

    6.混合阴影处理

    7.半透明物理处理

    8.后处理 & ToneMapping

    9.HUD& UI

    UE4虚幻引擎开发手机游戏(一)

    1. 视口建立

    •查询所有可见物体

    •视锥裁剪

    •距离裁剪

    •预计算的可见性(类似U3D的Umbra,离线计算场景的可见性,运行时通过少量开销即可判断静态物体的遮挡情况)

    •关联的可见性

    •查询所有可见阴影

    •收集动态Mesh项

    •更新视口相关的UniformBuffer

    UE4虚幻引擎开发手机游戏(一)

    2. GPU粒子模拟

    •需要支持OpenGLES3.1的设备

    •在GPU上对粒子进行模拟

    •将粒子位置写入128位的目标中

    •将粒子的速度写入64位的目标中

    UE4虚幻引擎开发手机游戏(一)

    3. 阴影图渲染

    •准备深度绘制目标

    •查询所有产生阴影的对象

    •使用主光视角对这些物体进行渲染

    •阴影图将在后续过程被使用

    •在基础Pass阶段处理CSM阴影的时候使用

    •随后,在需要混合阴影投影的地方使用

     

    UE4虚幻引擎开发手机游戏(一)



    前面已经对使用UE4开发高品质的手机游戏的UE4渲染器、特性集和渲染管线做了介绍,这篇文章是要对它下面部分进行介绍,结合这两部分的干货内容,大家才能更好的去利用UE4引擎做出一款好的手机游戏。

    4. 基础Pass(准备阶段)

    •       根据阴影和灯光的属性为物体选择合适的Shader

    •       无光模式

    •       预处理的距离场阴影 + 光照图

    •       预处理的距离场阴影 + 光照图 + CSM(用于处理动态物体阴影)

    •       动态光照(一般与CSM阴影配合)

    •       其它

    UE4虚幻引擎开发手机游戏(二)

    4. 基础Pass(绘制阶段)

    绘制所有拥有不透明材质的物体(同时计算物体光照), 在HDR/线性空间输出场景颜色

    •       动态的方向光和点光源(逐像素光照, ps中计算光照)

    •       静态的距离场阴影

    •       动态的CSM阴影

    •       静态灯光产生的光照图

    •       天光

    •       反射

    UE4虚幻引擎开发手机游戏(二)

    4. 基础Pass(渲染顺序)

    物体的渲染顺序由设备决定

    •       不需要任何排序的情况

    •       支持TBDR的芯片,一般都支持 “HiddenSurface Removal”(“隐藏面消除”)

    •       重新按从近到远的顺序对每个列表进行排序

    •       最小化状态改变

    •       重新按从近到远的顺序对所有列表中的所有物体进行排序

    •       最小化Overdraw

    •       non-ImgTec GPU的默认选项

    •       你能够根据自己的需要对该行为进行定制

    •       r.ForwardBasePassSort = x


    UE4虚幻引擎开发手机游戏(二)

    5. 延时贴花

    •       需要场景深度获取的功能

    •       通过支持的扩展实现

    •       GL_ARM_shader_framebuffer_fetch_depth_stencil

    •       GL_EXT_shader_framebuffer_fetch

    •       GL_OES_depth_texture

    •       深度缓冲区解析

    •       支持“Receives Decals”标识

    •       模板操作

    •       贴花不支持光照

    UE4虚幻引擎开发手机游戏(二)

    6. 混合阴影投影

    •       与延时贴花类同

    •       不能与静态光照进行比较好的混合

    •       静态光照 + CSM是一个更好的选择(4.12+)

    UE4虚幻引擎开发手机游戏(二)

    7. 半透明物体处理

    •       利用Base Pass时使用的相同Shader,在半透的混合模式下对图元进行绘制。

    •       不对深度缓冲区进行写操作。

    •       反射支持

    •       需要完整的场景颜色拷贝。

    UE4虚幻引擎开发手机游戏(二)

    8. 后处理

    •       仅在HDR打开的时候才被支持

    •       根据效果使用的情况需要一些额外的Pass

    •       景深

    •       自定义的后处理材质

    •       Tonemapper Pass发生在最后阶段

    •       将HDR 颜色映射到8位每通道的RGB颜色

    •       同时将颜色值写回后备缓冲区

    •       Bloom也在该阶段应用

    •       Filmic tonemapping(4.13+)

    UE4虚幻引擎开发手机游戏(二)

    9.HUD & UI

    •       直接将UI对象绘入后备缓冲区

    •       Slate BP(蓝图)

    •       幕布(Canvas)

    •       交换后备缓冲区

    UE4虚幻引擎开发手机游戏(二)

    光照: 全动态光照

    移动的方向光 + CSM阴影

    •       编辑器准备

    •       方向光组件,“Mobility” 属性设置为 “Movable”

    •       设置“Dynamic Shadow Distance Movable Light” 的值

    •       设置“Num Dynamic Shadow Cascades”的值

    •       优点

    •       所有的光都是动态的,都可以被运行时修改

    •       减少内存大小和包体大小(因为没有预计算的光照信息)

    •       缺点

    •       所有在场景中的物体,不管是静态还是动态的,都需要被CSM渲染

    •       额外的渲染批次和CSM生成开销

    UE4虚幻引擎开发手机游戏(二)

    静态方向光

    更简单的移动平台光照准备

    •       直接光和高光被逐像素计算

    •       强度和颜色能被运行时改变,但光的方向不能被改变

    •       编辑器准备

    •       方向光组件中,将“Mobility”属性设置为“Stationary(1 supported)”

    •       将“Cast Dynamic Shadows”属性设置为“False”

    优点

    •       更快的渲染速度

    •       高质量的距离场阴影

    缺点

    •       光的方向不能运行时改变

    •       仅支持混合角色阴影

    •       内存和包体大小因为预计算的Shadowmap等信息变大

    UE4虚幻引擎开发手机游戏(二)

    静态方向光 + CSM阴影

    4.13版本的优化

    •       不再需要对每个物体设置是否接收CSM阴影的属性。

    •       编辑器准备

    •       方向光组件,将“Mobility”属性设置为“Stationary(1 supported)

    •       设置“Dynamic Shadow Distance Stationary Light”的值

    •       设置“Num Dynamic Shadow Cascades”的值

    •       禁用 “Inset Shadows For Movable Objects”选项

    优点

    •       静态几何体通过距离场阴影产生静态阴影

    •       动态角色阴影能够很好的与静态阴影混合

    缺点

    •       CSM生成消耗(仅仅只包含动态对象)

    •       基础Pass需要一个额外的纹理单元(用于CSM阴影)

    UE4虚幻引擎开发手机游戏(二)

     

    动态点光源

    与其他光照准备独立

    •       每个物体/表面支持最多4个点光

    •       将“Max Movable Point Lights” 设为大于0的值, 该选项在Project Settings/ Engine Rendering中

    优点

    •       当成基础Pass的一部分进行渲染,所以不会产生额外的渲染批次

    缺点

    •       需要额外的shader计算

     UE4虚幻引擎开发手机游戏(二)

     

    灯光通道(???没有搞明白这东东的作用)

    灯光通道在4.13及以上版本被支持

    •       限制:每个物体仅一个静态或者动态方向光能被应用

    UE4虚幻引擎开发手机游戏(二)

    后处理 – FilmicTonemapper

    •       对于美术来说可以更自由的获取他们想要的视觉效果。

    •       通过控制台变量启用

    •       r.tonemapperfilm(4.12-5.15)

    •       4.15默认开启了该选项

    •       r.mobile.tonemapperfilm(4.16+)

    •       因为有额外的性能开销,建议仅在高端机上使用。

    UE4虚幻引擎开发手机游戏(二)

    自定义后处理过程

    •       自定义后处理过程

    •       通过材质系统创建后处理Shader

    UE4虚幻引擎开发手机游戏(二)

    •       自定义深度

    •       算定义深度(4.14新增)

    •       选中的物体可以被渲染到一个独立的深度缓冲区中

    •       这个独立的缓冲区可以在自定义的后处理中被采样

    UE4虚幻引擎开发手机游戏(二)

    后处理 – 自定义模板值

    自定义模板值(4.15新增)

    •       在PC上可以直接对模板缓冲区中的模板值进行采样

    •       在移动GPU上不能进行该操作

    •       UE4通过渲染到一个独立的颜色缓冲区的方式支持该功能

    UE4虚幻引擎开发手机游戏(二)

    非渲染部分

    UE4虚幻引擎开发手机游戏(二)

    移动平台的补丁和DLC支持

    最小化的APK/IPA + DLC 打包向导(4.13)

    •       极小的包体下载(AppStore/GooglePlay)

    •       仅需要下载内容时显示的UI

    •       从云端下载游戏内容和补丁

    •       强制用户内容更新

    UE4虚幻引擎开发手机游戏(二)

    移动平台的补丁和DLC支持

    “Mobile Patch Utilities” BP 库(4.14)

    •       通过BP控制下载安装处理过程

    •       进度条 & 错误处理

    •       存储空间

    •       Wifi 可用性

    •       其他

    UE4虚幻引擎开发手机游戏(二)

    大Apk包体支持

    •       在中国分包模式不可行(阿西, 专门提到中国), 然而在某些情况下大包体在一些设备上不能正常工作

    •       4.16开始这个问题被修复,现在不存在APK包体大小的限制了

    UE4虚幻引擎开发手机游戏(二)

    4.16中的移动平台改进

    •       更小的Android执行程序

    •       更改编译器的选项移除不使用的代码

    •       UI 相关蓝图的性能优化

    •       Android的运行时权限获取

    UE4虚幻引擎开发手机游戏(二)

    4.16中的移动平台改进

    •       材质节点新增“VertexInterpolator” – 对移动优化极其有用(???使用VS中的插值代替PS插值)

    UE4虚幻引擎开发手机游戏(二)

    开发中的移动平台功能

    •       更快的帧迭代时间 –Android平台

    •       改进的 编辑器内 移动平台预览

    •       改进的PC iOS版本发布

    •       简单的远程工具链安装

    •       远程日志输出?

     UE4虚幻引擎开发手机游戏(二)

     


    展开全文
  • 按照unreal engine 4.25的文档安装Android,配置sdk、ndk然后编译的时候一直报gradle的错误。 第一个是 download https://services.gradle.org/distributions/gradle-5.4.1-all.zip ,无法开始下载 第二个是 ...

    按照unreal engine 4.25的文档安装Android,配置sdk、ndk然后编译的时候一直报gradle的错误。

    第一个是

    download https://services.gradle.org/distributions/gradle-5.4.1-all.zip ,无法开始下载
    

    第二个是

    classpath com.android.tools.build:gradle:3.5.3 无法下载
    

    配置了半天Android的proxy,还是不行,头大的不得了。

    自动解决方式

    搞了几天偶然发现问题出在gradle的代理配置上。。。
    在 C:\Users[user].gradle 文件夹里边有个gradle.properties
    其中的配置如下:

    systemProp.https.proxyPort=1080
    systemProp.http.proxyHost=127.0.0.1
    systemProp.https.proxyHost=127.0.0.1
    systemProp.http.proxyPort=1080
    

    把其中的https的全部注释掉就能够正常使用代理下载了。。。尴尬
    不过倒是也学了一下手动下载gradle跟gradle插件的方法。

    手动解决方式(没有解决。。):

    第一个问题,打开Androidstudio,gradle会开始尝试自动下载对应的gradle版本
    在文件地址下自动生成一个hash的文件夹。

    C:\Users\[user]\.gradle\wrapper\dists\gradle-5.4.1-all\[hash_file]
    

    里边有两个文件

    gradle-5.4.1-all.zip.lck
    gradle-5.4.1-all.zip.part => gradle-5.4.1-all.zip.ok (代表已经下载好了)
    

    同时把对应gradle版本的压缩包放到这个文件夹中,并且解压一下,在从新打开AndroidStudio完成这部分手动处理。

    第二个问题,感觉手动创建成功的概率不大,因为需要下载的实在是太多了。。。相关路径大致如下

    C:\Users\[user]\.gradle\caches\modules-2
    C:\Users\[user]\.gradle\caches\modules-2\files-2.1\com.android.tools.build\gradle\3.5.3
    
    展开全文
  • Unreal Android打包

    2019-06-12 19:03:18
    为什么80%的码农都做不了架构师?>>> ...

    #编者注 编者当前Unreal版本为4.12.5,在安装好VS2015+Android NDK后,就可以进行编译了。 #资料 压缩方法有7类 Texture Format全解析 #Unreal Android打包种类 Android(所有)
    Android(多个:ASTC、PVRTC、DXT、ATC、ETC2、ETC1)
    Android(ATC)Adreno
    Android(DXT) nVIDIA Tegra系列,VivanteGC 系列
    Android(ETC1) Older mali
    Android(ETC2)
    Android(PVRTC) PowerVR系列GPU支持
    Android(ASTC) ARM Mali系列GPU加强应用ASTC技术

    输入图片说明

    #通用纹理压缩 ETC1

    #通过"启动"来部署到设备 本文在Unreal,对应项目,如果配置好了android设备,并打开了开发者模式,则可以查看到对应设备。但是由于本文所处设备使用的是Nexus 7 2012,Unreal自动识别的DXT,部署后,显示乱码。无法正常查看效果。则寻找其他方法部署到Android设备上。

    #通过命令行部署到Android设备 在使用ETC1打包完成后,进入打包目录,可以看到4个文件。 ##通过adb命令查看Android设备ID

    adb devices
    

    本文查看到一个设备,记录设备前面的ID串号

    ##命令行运行与部署 打开命令行,输入如下指令

    Install_ProjectName_Development-armv7-es2.bat 设备串号
    

    就可以看到自动把生成的apk和obb文件部署到android设备上了。

    转载于:https://my.oschina.net/hava/blog/742378

    展开全文
  • 通过一个例子,一步步介绍如何在windows下将第三方库打包到一个Android应用中。

    目录

    一、准备一个UE4工程

    二、准备一个简单的C++代码,作为第三方库使用

    三、将以上代码编译成库

    四、在UE4工程中使用这些库

    五、使这些库能在UE4工程中编译并运行

    六、在UE4工程中创建组件并配置参数

    七、在UE4工程中配置打包Android应用所需要的参数


    本文通过一个例子,一步步介绍如何在windows下将第三方库打包到一个Android应用中。

    一、准备一个UE4工程

     在这个工程中建一个Widget:BP_Input,并在这个Widget中放入一个TextBox:TextBox_Input。这个TextBox用于显示从第三方库中获取的信息。

    并给这个Widget添加一个用于设置TextBox内容的函数:SetInputText

    二、准备一个简单的C++代码,作为第三方库使用

    share.h

    #ifdef HELLO_API_EXPORTS
      #define HELLO_API			    __declspec(dllexport)
    
    #elif defined(HELLO_API_IMPORTS)
      #define HELLO_API			    __declspec(dllimport)
    
    #else
      #define HELLO_API
    
    #endif

    Hello.h

    #include <string>
    #include "share.h"
    
    class HELLO_API Hello
    {
    public:
    	std::string sayHello(std::string msg);
    };

    Hello.cpp

    #include "Hello.h"
    
    std::string Hello::sayHello(std::string msg)
    {
        return "Hello " + msg;
    };

    三、将以上代码编译成库

    1、编译成Windows动态库,用于在Windows上做开发和测试用

    在编译时,设置编译参数:HELLO_API_EXPORTS,编译后得到如下两个文件:

    hello.dll
    hello.lib

    2、编译成Android上的共享库,用于打包到Android应用中

    (1)、安装android-ndk,android-sdk,apache-ant,jdk等

    使用C:\Epic Games\UE_4.18\Engine\Extras\AndroidWorks\Win64\CodeWorksforAndroid-1R6u1-windows.exe进行安装。默认都会安装到C:\NVPACK目录下。

    (2)、生成toolchain工具

    由于是在windows下生成能在Android系统中使用的库,所以需要使用toolchain工具。

    可以在C:\NVPACK\android-ndk-r12b\build\tools下找到make_standalone_toolchain.py和make_standalone_toolchain.sh,它们是用来生成toolchain工具的。toolchain工具可以编译C++程序,并生成指定CPU架构的库文件。

    make_standalone_toolchain.py --arch arm --api 24 --package-dir C:\NVPACK

    --arch             表示指定CPU的架构,这里使用的是arm。如果还要生成其它CPU架构的库可指定其它值。
    --api               表示目录Android API的Level
    --package-dir 表示toolchain工具生成后存放的目录

    关于make_standalone_toolchain.py的详细参数,可以通过make_standalone_toolchain.py --help查到:

    make_standalone_toolchain.py --help
    usage: make_standalone_toolchain.py [-h] --arch
                                        {arm,arm64,mips,mips64,x86,x86_64}
                                        [--api API]
                                        [--stl {gnustl,libc++,stlport}] [--force]
                                        [-v]
                                        [--package-dir PACKAGE_DIR | --install-dir INSTALL_DIR]

    Creates a toolchain installation for a given Android target. The output of
    this tool is a more typical cross-compiling toolchain. It is indended to be
    used with existing build systems such as autotools.

    optional arguments:
      -h, --help            show this help message and exit
      --arch {arm,arm64,mips,mips64,x86,x86_64}
      --api API             Target the given API version (example: "--api 24").
      --stl {gnustl,libc++,stlport}
                            C++ STL to use.
      --force               Remove existing installation directory if it exists.
      -v, --verbose         Increase output verbosity.
      --package-dir PACKAGE_DIR
                            Build a tarball and install it to the given directory.
                            If neither --package-dir nor --install-dir is
                            specified, a tarball will be created and installed to
                            the current directory.
      --install-dir INSTALL_DIR
                            Install toolchain to the given directory instead of
                            packaging.

    执行完成后将会生成文件:C:\NVPACK\arm-linux-androideabi.zip。解压后就可以使用它来编译C++程序了。

    (3)、使用toolchain编译C++代码

    C:\NVPACK\arm-linux-androideabi\bin\arm-linux-androideabi-g++.exe share.h Hello.h Hello.cpp -shared -fPIC -o libhello.so

    -shared    表示生成共享库
    -fPIC       表示生成与路径无关的库

    四、在UE4工程中使用这些库

    在AndroidProject目录下创建ThirdParty目录及其子目录,并将C++代码和生成的库文件按如下目录结构存放:

    AndroidProject-+
                             |-Source
                             |-ThirdParty-+
                                                  |-hello-+
                                                              |-android-+
                                                                              |-libhello.so
                                                              |-include-+
                                                                              |-Hello.h
                                                                              |-share.h
                                                              |-x64-----+
                                                                              |-hello.lib
                                                                              |-hello.dll

    修改AndroidProjectGameMode.h和AndroidProjectGameMode.cpp

    #pragma once
    
    #include "CoreMinimal.h"
    #include "GameFramework/GameModeBase.h"
    #include "Blueprint/UserWidget.h"
    #include "AndroidProjectGameMode.generated.h"
    
    UCLASS(minimalapi)
    class AAndroidProjectGameMode : public AGameModeBase
    {
    	GENERATED_BODY()
    
    private:
    
    	UPROPERTY()
    		UUserWidget* InputWidget;
    
    public:
    	AAndroidProjectGameMode();
    
    	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UMG")
    	TSubclassOf<UUserWidget> InputWidgetClass;
    
    	void BeginPlay();
    };
    #include "AndroidProjectGameMode.h"
    #include "AndroidProjectCharacter.h"
    #include "UObject/ConstructorHelpers.h"
    #include "Hello.h"
    
    AAndroidProjectGameMode::AAndroidProjectGameMode()
    {
    	// set default pawn class to our Blueprinted character
    	static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/ThirdPersonCPP/Blueprints/ThirdPersonCharacter"));
    	if (PlayerPawnBPClass.Class != NULL)
    	{
    		DefaultPawnClass = PlayerPawnBPClass.Class;
    	}
    }
    
    void AAndroidProjectGameMode::BeginPlay()
    {
    	Super::BeginPlay();
    
    	InputWidget = CreateWidget<UUserWidget>(GetWorld(), InputWidgetClass);
    	if (InputWidget != nullptr)
    	{
    		UFunction* SetInputText = InputWidget->FindFunction(FName("SetInputText"));
    		if (SetInputText) {
    			Hello hello;
    			std::string msg = hello.sayHello("Tom");
    			FString InputText = FString(msg.c_str());
    
    			UE_LOG(LogTemp, Log, TEXT("InputText=%s"), *InputText);
    
    			InputWidget->ProcessEvent(SetInputText, &InputText);
    		}
    
    		InputWidget->AddToViewport();
    	}
    };

    可以从代码中看到,使用FindFunction查找InputWidget中定义的函数,使用ProcessEvent调用InputWidget中的函数。同时也调用了第三方库的sayHello方法,并将调用结果显示在InputWidget上。

    五、使这些库能在UE4工程中编译并运行

    1、修改AndroidProject.Build.cs文件

    using UnrealBuildTool;
    using System;
    using System.IO;
    
    public class AndroidProject : ModuleRules
    {
        private string ThirdPartyPath
        {
            get
            {
                return Path.GetFullPath(Path.Combine(ModuleDirectory, "../../ThirdParty"));
            }
        }
    
        public AndroidProject(ReadOnlyTargetRules Target) : base(Target)
    	{
    	PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
    
    	PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "UMG" });
    
            string helloPath = ThirdPartyPath + "/hello";
    
            PublicIncludePaths.Add(helloPath + "/include");
    
            if (Target.Platform == UnrealTargetPlatform.Win64)
            {
                Definitions.AddRange(new string[] { "HELLO_API_IMPORTS" });
    
                PublicLibraryPaths.Add(helloPath + "/x64");
                PublicAdditionalLibraries.Add("hello.lib");
            }
            else if (Target.Platform == UnrealTargetPlatform.Android)
            {
                AdditionalPropertiesForReceipt.Add(new ReceiptProperty("AndroidPlugin", Path.Combine(helloPath, "My_APL_armv7.xml")));
    
                PublicLibraryPaths.Add(Path.Combine(helloPath, "android"));
                PublicAdditionalLibraries.Add("hello");
            }
            else if (Target.Platform == UnrealTargetPlatform.IOS)
            {
                PublicLibraryPaths.Add(helloPath + "/IOS");
            }
        }
    }

    由于使用了Widget,所以要在PublicDependencyModuleNames中添加UMG。
    上述代码根据编译目标平台(Target.Platform)的不同设置不同的配置:
    (1)Windows平台下,由于导入DLL时需要使用__declspec(dllimport),所以添加HELLO_API_IMPORTS参数。添加导出库hello.lib用作编译。
    (2)Android平台下,添加库名hello,toolchain在编译时会自动加上前缀lib和后缀.so,最终生成的库名为libhello.so;如果此处直接使用库名libhello.so而不用库名hello,编译时反而会找不到库。

    My_APL_armv7.xml放在AndroidProject\ThirdParty\hello目录下,文件的内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <!-- steps to add to build additions -->
    <root xmlns:android="http://schemas.android.com/apk/res/android">
    	<!-- init section is always evaluated once per architecture -->
    	<init>
    	    <setBool result="bSupported" value="false"/>
    	        <isArch arch="armeabi-v7a">
    	            <setBool result="bSupported" value="true"/>
    	        </isArch>
    	</init>
    
    	<!-- optional files or directories to copy to Intermediate/Android/APK -->
    	<resourceCopies>
    	    <isArch arch="armeabi-v7a">
    	        <copyFile src="$S(BuildDir)/../../../ThirdParty/hello/android/libhello.so"
    	                  dst="$S(BuildDir)/libs/armeabi-v7a/libhello.so" />
    		</isArch>
    	</resourceCopies>
    
    	<!-- optional libraries to load in GameActivity.java before libUE4.so -->
    	<soLoadLibrary>
    	    <if condition="bSupported">
    	        <true>
    			<loadLibrary name="hello" failmsg="Failed to load myso library" />
    		</true>
    	    </if>
    	</soLoadLibrary>
    </root>

     它的作用是:
    (1)在打包Android应用时,将AndroidProject/ThirdParty/hello/android/libhello.so文件拷贝到AndroidProject/Intermediate/Android/APK/libs/armeabi-v7a/目录下。这样就不用手动拷贝了。
    (2)在AndroidProject\Intermediate\Android\APK\src\com\epicgames\ue4\GameActivity.java文件中生成加载hello库的代码:

    try
    {
    	System.loadLibrary("hello");
    }
    catch (java.lang.UnsatisfiedLinkError e)
    {
    	Log.debug(e.toString());
    	Log.debug("Failed to load hello library");
    }

    2、将hello.dll拷贝到AndroidProject\Binaries\Win64目录下。这样就可以从VS中启动UE4了。

    六、在UE4工程中创建组件并配置参数

    1、启动UE4后,创建Blueprint

    在AndroidProjectGameMode上点右键,创建AndroidProjectGameMode对应的Blueprint:BP_AndroidProjectGameMode,打开BP_AndroidProjectGameMode后,设置Input Widget Class:

    2、配置GameMode

    将GameModeOverride配置成BP_AndroidProjectGameMode

    3、查看运行结果

    点击“Play”后,就可以看到界面右上方文本框中正确显示了调用第三方库函数后返回的结果。但这只是说明了在Windows上调用第三方库运行正常,接下来要将第三方库打包到Android应用中去。

    七、在UE4工程中配置打包Android应用所需要的参数

    1、打开Editor -> Project Settings,其中必须的配置如下:

    其它可选的优化配置:

    Project    -> Packaging    -> Packaging         -> Create compressed cooked packages  (Enable)
    Project    -> Packaging    -> Packaging         -> Full Rebuild           (Enable)
    Project    -> Packaging    -> Packaging         -> Exclude editor content when cooking  (Enable)

    Engine     -> Network      -> Libcurl              -> Verify peer   (Disable)
    Engine     -> Input        -> Mouse Properties  ->  Use Mouse for touch   (Disable)
    Engine     -> Input        -> Moblie                 ->  Always show touch interface (Disable)
    Engine     -> Rendering    -> Moblie            ->  Max Dynamic Point Lights = 0

    Platforms  -> Android      -> APKPackaging      ->  Enable Gradle instead of Ant    (Disable)
    Platforms  -> Android      -> APKPackaging      ->  Package game data inside apk?   (Enable)

    Plugins    -> OculusVR     -> Splash Screen     ->  Auto Enable    (Disable)
    Plugins    -> TCP Messaging-> Transport         ->  Enable Transport    (Disable)
    Plugins    -> UDP Messaging-> Transport         ->  Enable Transport    (Disable)

     2、然后进行打包操作。选择ETC1是因为所有Android设备都支持它:

     3、最后会在AndroidProject\Android_ETC1下生成:AndroidProject-armv7-es2.apk。这就是最终可以放到Android设置安装并运行的文件。

    4、如果想知道在打包过程中执行了哪些命令,这此命令都的哪些参数的话,可以在C:\Epic Games\UE_4.18\Engine\Source\Programs\UnrealBuildTool\System\ActionGraph.cs文件中的如下方法中

    public static bool ExecuteActions(BuildConfiguration BuildConfiguration, List<Action> ActionsToExecute, 
    bool bIsRemoteCompile, out string ExecutorName, string TargetInfoForTelemetry, EHotReload HotReload)

    对ActionsToExecute加上打印语句:

    using (StreamWriter writer = new StreamWriter("D:/Temp/log.txt", true))
    {
    	foreach (Action action in ActionsToExecute)
    	{
    		writer.WriteLine("action=" + action.ToString());
    	}
    
    	writer.Close();
    }

     就可以查看到如下日志:

    action=C:/NVPACK/android-ndk-r12b\toolchains/llvm\prebuilt/windows-x86_64\bin/clang++.exe - @"D:\projects\AndroidProject\Intermediate\Build\Android\AndroidProject\Development\AndroidProject\AndroidProjectGameMode.cpp-armv7-es2.o_37AAC25F.rsp"
    action=C:/NVPACK/android-ndk-r12b\toolchains/llvm\prebuilt/windows-x86_64\bin/clang++.exe -  -nostdlib -Wl,-shared,-Bsymbolic -Wl,--no-undefined -Wl,-gc-sections -target armv7-none-linux-androideabi --sysroot="C:/NVPACK/android-ndk-r12b/platforms/android-24/arch-arm" -gcc-toolchain "C:/NVPACK/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64" -march=armv7-a -Wl,--fix-cortex-a8 -Wl,-soname,libUE4.so -o "D:/projects/AndroidProject/Binaries/Android/AndroidProject-armv7-es2.so" @"D:/projects/AndroidProject/Intermediate/Build/Android/AndroidProject/Development/AndroidProject-armv7-es2.so.response"
    action=C:\Microsoft\Visual Studio\2017\Professional\VC\Tools\MSVC\14.15.26726\bin\HostX64\x64\cl.exe -  @"D:\projects\AndroidProject\Intermediate\Build\Win64\UE4Editor\Development\AndroidProject\AndroidProjectGameMode.cpp.obj.response"
    action=C:\Microsoft\Visual Studio\2017\Professional\VC\Tools\MSVC\14.15.26726\bin\HostX64\x64\link.exe - @"D:\projects\AndroidProject\Plugins\tanx\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-tanx-4779.dll.response"
    action=C:\Microsoft\Visual Studio\2017\Professional\VC\Tools\MSVC\14.15.26726\bin\HostX64\x64\link.exe - @"D:\projects\AndroidProject\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-AndroidProject-7604.dll.response"
    action=C:\Microsoft\Visual Studio\2017\Professional\VC\Tools\MSVC\14.15.26726\bin\HostX64\x64\lib.exe - @"D:\projects\AndroidProject\Plugins\tanx\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-tanx-4779.lib.response"
    action=C:\Microsoft\Visual Studio\2017\Professional\VC\Tools\MSVC\14.15.26726\bin\HostX64\x64\lib.exe - @"D:\projects\AndroidProject\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-AndroidProject-7604.lib.response"
    action=C:\Microsoft\Visual Studio\2017\Professional\VC\Tools\MSVC\14.15.26726\bin\HostX64\x64\link.exe - @"D:\projects\AndroidProject\Intermediate\Build\Win64\UE4Editor\Development\UE4Editor-AndroidProject.dll.response"

     其中,D:\projects\AndroidProject\Intermediate\Build\Android\AndroidProject\Development\AndroidProject\AndroidProjectGameMode.cpp-armv7-es2.o_37AAC25F.rsp中存放编译参数:

     -target armv7-none-linux-androideabi --sysroot="C:/NVPACK/android-ndk-r12b/platforms/android-24/arch-arm" -gcc-toolchain "C:/NVPACK/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64" -c -fdiagnostics-format=msvc -Wall -Wdelete-non-virtual-dtor -Wno-unused-variable -Wno-unused-function -Wno-switch -Wno-tautological-compare -Wno-unused-private-field -Wno-local-type-template-args -Wno-return-type-c-linkage -Wno-reorder -Wno-unknown-pragmas -Wno-invalid-offsetof -Wno-logical-op-parentheses -Wshadow -Wno-error=shadow -Wundef -Wno-error=undef -Wno-undefined-bool-conversion -Wno-gnu-string-literal-operator-template -Wno-unused-local-typedef -Wno-inconsistent-missing-override -g2 -gdwarf-4 -O3 -fno-exceptions -fno-rtti -funwind-tables -fstack-protector -fno-strict-aliasing -fpic -fno-short-enums -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -ffunction-sections -fdata-sections -fsigned-char -Werror -DPLATFORM_64BITS=0 -DPLATFORM_ANDROID_ARM=1 -I"C:/NVPACK/android-ndk-r12b/sources/cxx-stl/gnu-libstdc++/4.9/include" -I"C:/NVPACK/android-ndk-r12b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include" -I"C:/NVPACK/android-ndk-r12b/sources/android/native_app_glue" -I"C:/NVPACK/android-ndk-r12b/sources/android/cpufeatures" -I"C:/Epic Games/UE_4.18/Engine/Source" -I"D:/projects/AndroidProject/ThirdParty/hello/include" -I"D:/projects/AndroidProject/Source" -I"D:/projects/AndroidProject/Intermediate/Build/Android/UE4/Inc/AndroidProject" -I"D:/projects/AndroidProject/Source/AndroidProject" -I"Runtime/Core/Public" -I"Runtime/Core/Public/Internationalization" -I"Runtime/Core/Public/Async"

    。。。。。。。

     -x c++ -std=c++14 -O3 -include "C:/Epic Games/UE_4.18/Engine/Intermediate/Build/Android/UE4/Development/Engine/SharedPCH.Engine-armv7-es2.h" -include "D:/projects/AndroidProject/Intermediate/Build/Android/AndroidProject/Development/AndroidProject/Definitions.AndroidProject.h" -o "D:/projects/AndroidProject/Intermediate/Build/Android/AndroidProject/Development/AndroidProject/AndroidProjectGameMode.cpp-armv7-es2.o" "D:/projects/AndroidProject/Source/AndroidProject/AndroidProjectGameMode.cpp"

     D:/projects/AndroidProject/Intermediate/Build/Android/AndroidProject/Development/AndroidProject-armv7-es2.so.response中存放链接参数:

    "AndroidProject/AndroidProject.cpp-armv7-es2.o"
    "AndroidProject/AndroidProjectCharacter.cpp-armv7-es2.o"
    "AndroidProject/AndroidProjectGameMode.cpp-armv7-es2.o"
    "AndroidProject/AndroidProject.init.gen.cpp-armv7-es2.o"
    "AndroidProject/AndroidProjectCharacter.gen.cpp-armv7-es2.o"
    "AndroidProject/AndroidProjectGameMode.gen.cpp-armv7-es2.o"
    "tanx/Module.tanx.cpp-armv7-es2.o"
    "UELinkerFixups/UELinkerFixups.cpp-armv7-es2.o"
     -L"C:/NVPACK/android-ndk-r12b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/Android/cxa_demangle/armeabi-v7a" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/ICU/icu4c-53_1/Android/ARMv7/lib" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/FreeType2/FreeType2-2.4.12/Lib/Android/ARMv7" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/HarfBuzz/harfbuzz-1.2.4/Android/ARMv7/Release/" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/libPNG/libPNG-1.5.27/lib/Android/ARMv7" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/PhysX/Lib/Android/ARMv7" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/libcurl/lib/Android/ARMv7" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/Ogg/libogg-1.2.2/lib/Android/ARMv7" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/Vorbis/libvorbis-1.3.2/lib/Android/ARMv7" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/Vorbis/libvorbis-1.3.2/Lib/Android/ARMv7" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/GooglePlay/gpg-cpp-sdk.v2.3/gpg-cpp-sdk/android/lib/gnustl/armeabi-v7a/" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/libOpus/opus-1.1/Android/ARMv7/" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/Oculus/OVRPlugin/OVRPlugin/Lib/armeabi-v7a/" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/Oculus/OVRPlugin/OVRPlugin/ExtLibs/" -L"C:/Epic Games/UE_4.18/Engine/Source/ThirdParty/PhysX/Lib/Android/ARMv7" -L"D:/unreal_projects/AndroidProject/ThirdParty/hello/android" -Wl,--start-group "-lgnustl_shared" "-lgcc" "-lz" "-lc" "-lm" "-llog" "-ldl" "-lGLESv2" "-lEGL" "-lOpenSLES" "-landroid" "-lcxa_demangle" "-lz" "-licudata" "-licuuc" "-licui18n" "-licule" "-liculx" "-licuio" "-lfreetype2412" "-lharfbuzz" "-lpng" "-lPhysX3PROFILE" "-lPhysX3ExtensionsPROFILE" "-lPhysX3CookingPROFILE" "-lPhysX3CommonPROFILE" "-lPxFoundationPROFILE" "-lPxPvdSDKPROFILE" "-lPsFastXmlPROFILE" "-lcurl" "-logg" "-lvorbis" "-lvorbisfile" "-lgpg" "-lopus" "-lspeex_resampler" "-lOVRPlugin" "-lvrapi" "-lPhysX3VehiclePROFILE" "-lPhysX3CookingPROFILE" "-lhello" "C:/Epic Games/UE_4.18/Engine/Binaries/Android/UE4-Launch-armv7-es2.a" 

    。。。。。。

    -Wl,--end-group 

     在链接参数中可以看到,使用的都是不含前缀lib和后缀.so的库名。

     

    参考文档

    How to add a shared library (.so) in android project
    Packaging Android Projects
    Reducing APK Package Size
    Android Development Reference
    Android SO文件的兼容和适配
    Packaging Projects

    展开全文
  • 前言使用UE4打过Android包的小伙伴都知道:UE4的默认打包方式会生成一个obb,一个apk,用处是为了方便减小apk的大小,因为google play对于上传的安装包是有限制的,网上大部分文章说这个限制是50M,但是我查到的最新...
  • 2018 Unreal Open Day参会总结

    千次阅读 2018-05-26 11:59:21
    今年是第二次参加UnrealOpenDay活动,收获颇丰,也认识了很多业界大咖。这里稍微详细点的总结一下会议内容和参会心得。 首先是行程: 会议9点签到,9:45正式开始。地点和去年一样还是在宝华万豪酒店,位于上海马戏...
  • 随着游戏内容的日趋精品化和重度化,Unreal引擎逐渐走进国内开发商的视野并被使用,然而其高门槛的操作使用和项目本身的重度性也使得优化工作愈发复杂艰难。作为性能优化的服务商,UWA测评今天正式支持了Unreal 引擎...
  • ue4打包android

    2018-06-03 22:21:07
    1.安装TADP (Tegra Android Development Pack) http://api.unrealengine.com/CHN/Platforms/Android/Reference/index.html 2.ProjectSetting https://blog.csdn.net/poem_of_sunshine/article/details/79246075 ...
  • UE4 打包Android项目的坑

    千次阅读 2018-09-30 16:56:58
    问题一: 当控制台出现这种报错时 UATHelper: Packaging (Android (ETC1)): ...D:\Android_TEST\MyProject\Intermediate/Android/APK\gradle\rungradle.bat" :app:assembleDebug” 第一步: 先查看项目...
  • 前言 转到ue4的理由 我是个资深unity玩家,自认为可以使用unity做任何事。对虚幻的仰慕纯属技术信仰,懂的都懂不多解释。促使我选择在这个时间点全面...登录官网地址: https://www.unrealengine.com/zh-CN 如果有ep
  • 5月23日,“2018 Unreal Open Day虚幻引擎技术开放日”在上海宝华万豪酒店开幕。作为Unreal引擎开发者年度盛典,本次活动将持续两天,来自Epic Games的资深制作人和技术专家向与会者们无私分享最前沿的开发技术,这...
  • 本文对编译打包Android应用遇到的问题进行汇总
  • Unreal4 入门

    万次阅读 2015-07-16 10:16:39
    使用Unreal4引擎前需要安装 或者编译引擎。 下面就为同学们介绍下 Unreal4 安装配置。 一. 在Win7下安装Unreal4 在Win7下安装Unreal4需要以下几个步骤: 1. 打开“控制面板”的“程序和功能” 检查...
  • 利用Jenkins玩转Android自动打包发包

    万次阅读 热门讨论 2018-03-02 00:16:05
    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布请尊重原创,转载请注明出处:...打包完成后可自动上传并且生成安装二维码总体步骤可为:下载新版Jenkins挂载到Tomcat编写Pyt...
  • 使用UE4发布安卓平台游戏

    千次阅读 2016-02-01 11:58:37
    使用了几天的UE4 ,总算是将游戏在安卓平台运行起来了。其中遇到很多问题,并且最终依然有一些问题没能解决。总体感觉是UE4这款引擎目前还不够成熟,问题较多。没有unity使用起来方便。但是既然开放了,发展必然迅猛...
  • UE4引擎AR开发插件Unreal4AR的获取方法

    千次阅读 2017-08-05 11:14:53
    《学习笔记记录》 新人接触UE4,在此发帖主要用于记录学习内容,同时希望可以帮助其他朋友 在网上看到很多AR的视频,感觉很...插件名称:Unreal4AR 官方网址:http://www.unreal4ar.com/ 打开后出现如下所示界面 此
  • 本章内容有点老生常谈,而且很多以前的朋友,同事写的博文都具有这一章,曾经打算直接略过,但是如果没有这一章内容,本系列将不具备完整性,和可参看性!为了让只看该系列人的人能大致了解UE4的开发方法,所以本...
  • Unreal Open Day 2017 活动上 Epic Games 开发者支持工程师郭春飚先生为到场的开发者介绍了在 Unreal Engine 4 中 UI 的优化技巧,以下是演讲实录。  大家好,我是 Epic Games 的开发者支持工程师郭春飚,今天给...
  • 这篇文章是从微软Web开发系列的一部分。 感谢您支持谁使SitePoint可能的合作伙伴。 团结和Epic的虚幻引擎,流行的中间件工具经常使用的游戏开发商,不限于创建作为一个可执行文件运行编译的应用程序。...
  • ue4 安卓建项及打包

    千次阅读 2017-08-29 13:02:40
    创建一个新项目作为一个蓝图项目在虚幻的项目浏览器发布到安卓最快的。选择没有启动的内容减少文件大小。进入到地方的项目,给它一个名字,一个空的文件夹位置。点击创建项目。 使用文件->新水平菜单项创建一...
1 2 3 4 5 ... 20
收藏数 613
精华内容 245
关键字:

unreal vs 生成安卓