适用于Unity引擎的iOS端Native插件
- iOS12 及以上
- Unity2017.4及以上(更早版本未测试)
- main:开发分支,此分支中的代码不保证完全稳定且可用
- release/latest:最新发布分支,此分支包含最新并稳定的代码,适合想要不断接收插件更新的用户
- release/版本号:每个发布版本的分支,包含对应发布版本的代码,适合长期使用某个版本的用户
- 选择一个本仓库中的任意一个release分支(除main之外)
- 前往Unity的 Package Manager
- 点击左上角的加号
- 选择
Add package from git URL
- 输入链接
https://github.com/Aaron8052/Unity-iOSNative-Plugin.git#BranchName
请将上方链接中的的
BranchName
更换为你选择的版本分支的名称
- 将本仓库完整地Clone到你的电脑中
- 切换分支为你想要的release分支(除main之外)
- 在 Package Manager 选择
Add package from disk
- 在弹出的文件选择对话框中找到刚才Clone的仓库,进入并选择
package.json
即可成功导入
- 切换仓库分支为你想要的release分支(除main之外)
- 下载本仓库中的全部内容
- 将仓库的
Plugins
文件夹中的全部内容导入到你的Unity项目中的Plugins
文件夹即可
- 调用本插件请确保引入
iOSNativePlugin
命名空间 - 然后调用 C#类 中的方法
模块名 | 功能 |
---|---|
.h |
头文件,包含各个类的声明和ExternC函数接口 |
iOSApplication.mm |
iOS应用相关 |
iCloudKeyValueStore.mm |
iCloud相关功能 |
Device.mm |
iPhone 设备相关 |
Notification.mm |
iOS 本地通知推送 |
NativeShare.mm |
iOS 自带的分享文件功能 |
NativeUI.mm |
原生UI相关 |
Utils.mm |
辅助文件,包含了插件通用内容、typedef、静态函数等声明 |
建议前往Wiki查看更详细的API文档
方法名前标有星号 “*” 表示该方法尚未经测试,可用性未知
游戏相关功能实现,用于补全Unity自带Game Center的功能缺陷
使用Game Center功能需要在Xcode的Capability中添加Game Center
方法 | 功能 |
---|---|
LoadScore() |
用于获取GameCenter中指定的玩家排行榜分数(支持获取循环排行榜分数) |
ShowGameCenterView | 显示Game Center界面 |
iOS应用相关功能
方法 | 功能 |
---|---|
GetBundleIdentifier() |
获取当前应用的Bundle Identifier |
GetVersion() |
获取应用版本号 |
GetBundleVersion() |
获取应用构建号 |
OpenAppSettings() |
打开本App的系统设置界面 |
GetUserSettingsBool() |
获取iOS settings bundle的Toggle Switch值 |
SetUserSettingsBool() |
修改iOS settings bundle的Toggle Switch值 |
GetUserSettingsString() |
获取iOS settings bundle的TextArea值 |
SetUserSettingsString() |
修改iOS settings bundle的TextArea值 |
GetUserSettingsFloat() |
获取iOS settings bundle的Slider Float值 |
SetUserSettingsFloat() |
修改iOS settings bundle的Slider Float值 |
GetUserSettingsInt() |
获取iOS settings bundle的Slider Long值 |
SetUserSettingsInt() |
修改iOS settings bundle的Slider Long值 |
iCloud相关功能
无需调用
Initialize
方法,插件会自动初始化
使用iCloudKeyValueStore功能需要在Xcode的Capability中开启iCloud的Key-Value Storage
方法 | 功能 |
---|---|
Initialize() |
初始化iCloud |
IsICloudAvailable() |
判断当前设备iCloud是否可用 |
ContainsKey() |
判断当前iCloud是否包含键 |
DeleteKey() |
删除Key |
Synchronize() |
强制同步iCloud云存档至Apple服务器(Bool返回值:是否同步成功) |
ClearICloudSave() |
清空iCloud存档 |
GetString() |
从iCloud读取String值 |
GetInt() |
从iCloud读取Int值 |
GetFloat() |
从iCloud读取Float值 |
GetBool() |
从iCloud读取Bool值 |
SetString() |
保存String值到iCloud |
SetInt() |
保存Int值到iCloud |
SetFloat() |
保存Float值到iCloud |
SetBool() |
保存Bool值到iCloud |
iOS 本地通知推送
无需调用
Initialize
方法,插件会自动初始化
方法 | 功能 |
---|---|
Initialize() |
初始化通知系统 |
PushNotification() |
推送本地定时通知 |
RemovePendingNotifications() |
移除某个待定通知(对于已经推送的通知无效) |
RemoveAllPendingNotifications() |
移除所有待定通知 |
原生UI相关
事件 | 功能 |
---|---|
OnStatusBarOrientationChanged |
UI朝向变更事件 |
属性 | 功能 |
---|---|
StatusBarOrientation |
当前UI的朝向 |
HideHomeIndicator |
显示/隐藏Home指示条 |
方法 | 功能 |
---|---|
SafariViewFromUrl() |
调用游戏内Safari窗口打开url |
SafariPageSheetFromUrl() |
调用游戏内Safari窗口打开url(以UIModalPresentationPageSheet方式) |
StatusBarOrientation |
当前UI的朝向 |
IsStatusBarHidden() |
判断当前系统状态栏是否被隐藏 |
SetStatusBarHidden() |
设置状态栏的隐藏状态 |
SetStatusBarStyle() |
设置状态栏的样式(白色、黑色、自动) |
ShowTempAlert() |
在应用内顶部展示一个内容为alertString,时长duration秒的横幅 |
iPhone 设备相关
方法 | 功能 |
---|---|
GetDeviceOrientation() |
获取当前设备的物理朝向 |
* IsBluetoothHeadphonesConnected() |
判断玩家当前是否连接了蓝牙耳机 |
IsMacCatalyst() |
判断当前app是否运行在Mac Catalyst环境下 (该方法已过时,改用IsRunningOnMac) |
IsRunningOnMac() |
判断当前app是否运行在Mac环境下 |
IsSuperuser() |
判断当前设备是否越狱 |
SetAudioExclusive() |
调用此方法可静音/暂停设备后台正在播放的音频 |
* PlayHaptics() |
震动 |
GetCountryCode() |
获取当前设备的ISO地区码(ISO 3166-1 alpha-2) |
iOS 分享文件功能
方法 | 功能 | 说明 |
---|---|---|
Share() |
调用系统分享功能 | |
ShareObjects() |
调用系统分享功能(与上一个方法功能一致,但允许自定义分享内容类型) | |
SaveFileDialog() |
调用系统保存文件对话框,允许玩家选择保存文件的路径 | |
SelectFileDialog() |
调用系统选择文件对话框,允许玩家选择文件 | 需要LSSupportsOpeningDocumentsInPlace 权限 |
SaveImageToAlbum() |
保存图片(本地绝对路径)到相册(App安装后首次调用会申请相册权限) | 网上搜索关于Xcode相册权限(NSPhotoLibraryUsageDescription )的配置方法。否则App无法正常申请权限 |
Unity打包的Xcode工程的Native插件都会放在Libraries文件夹里
- (当插件的文件结构发生变化)如果打包Xcode时选择的是Append,需要在Xcode中重新关联Plugin的文件夹(Xcode里面的Plugin文件变成红色)
- 确保每个Plugin文件都在右侧的属性里选择Relative to Project
- 确保每个Plugin文件的Target Membership都只勾选UnityFramework,其余都不要选
- 所有的.h头文件除了勾选UnityFramework外,右侧下拉选项还要选Project,而不是Public或Private
如果不会弄,可以清空Unity的打包缓存,然后再打包一个全新的Xcode工程,基本上可以解决问题