# unreal-封装接入指南
---

本文档面向要接入 4399 独代SDK 的虚幻引擎游戏

<span style="color:red">**SDK 以蓝图插件的方式封装，游戏以调用蓝图函数的方式接入**</span>
<span style="color:red">**插件开发环境是 unreal 4.27, 不同版本注意兼容问题**</span>

下载 [虚幻引擎蓝图插件 UEA](https://sdkftp.4399doc.com/external/operate/3.20.1/operate-unreal-3.20.1+727.zip) ，解压得到如下结构

```
.
├── Resources
│   └── Icon128.png
├── Source
│   └── UEA
│       ├── Private
│       │   ├── UEA.cpp
│       │   ├── UEaApi.cpp
│       │   └── UEABPLibraryTL.cpp
│       ├── Public
│       │   ├── UEA.h
│       │   ├── UEaApi.h
│       │   └── UEABPLibraryTL.h
│       ├── UEA.Build.cs
│       └── UEA_API.xml
└── UEA.uplugin
```

简单介绍文件作用
- `UEA.uplugin`: UEA 插件描述文件
- `Source/UEA/UEA.Build.cs`: 插件入口代码
- `Source/UEA/UEA_API_TL.xml`: **模板**，SDK 的 Android 配置与代码插入点，这些方法会被插入到`GameActivity`中
- `Source/UEA/*/UEA.*`: 插件入口样板代码
- `Source/UEA/*/UEaApi.*`: jni 封装代码，包含 SDK 的 java 方法及其回调
- `Source/UEA/*/UEABPLibraryTL.*`：**模板**，再次封装 jni 方法的蓝图函数，以便于蓝图编辑器可以索引

## 引入 插件

### 引入依赖
从工具栏上，设置 -> 新插件，选择蓝图库，创建`UEA`同名插件；  
到游戏项目的Plugins下，用插件压缩包中的内容，覆盖自动生成的文件，

**重启编辑器，以保证能索引到蓝图函数**


### 参数与配置替换
将`Source/UEA/UEA_API_TL.xml`文件，拷贝为`Source/UEA/UEA_API.xml`，调整所有带 *REPLACE* 标签的代码
- `abiFilters "armeabi-v7a"`，so 选择设置
- `<meta-data android:name="FTNN_CHANNEL_ID" android:value="4399"/>`，渠道配置
- `android:name="android.permission.WRITE_EXTERNAL_STORAGE`，可选的存储权限，若游戏使用，则需要处理申请流程
- `private static final boolean COMPAT_NOTCH = true;`, 可选的全面屏兼容

### 实现回调
将`Source/UEA/*/UEA/UEABPLibraryTL.*`文件，拷贝为`Source/UEA/*/UEA/UEABPLibrary.*`，并实现其中的回调方法。  
这些方法以`Java_com_epicgames_ue4_GameActivity`开头，在其中游戏根据业务需要处理SDK接口的后续调用流程


## 接口调用
游戏直接调用`Source/UEA/*/UEA/UEABPLibrary.`中的蓝图函数即可，可参考相应的接口说明

## 升级提示
用新版本插件覆盖旧版插件，将模板文件中的变化，合并到游戏已经配置或实现的文件中。


