IOS篇
在处理unity和ios的时候,除了对oc不太习惯以外,还有就是iphone和ipad有些方法需要做区别。比如通用的弹窗方法不用,以及ipad上打开相册竟然可以支持显示的相册不是全屏了!好吧,之前一直没有用ipad。具体代码可以从这里下载,测试环境unity2017.4.11、Xcode11。
简单写下流程:
1.unity点击打开->2.提示ios通用弹窗–>3.打开相册或者相机(确认权限)->4.返回image转成base64->5.通知unity。
需要关注的几点
1.把IOSCustomEmoji.h和IOSCustomEmoji. mm 放到unity Asset/Plugins/IOS 下。
2.权限添加:NSPhotoLibraryUsageDescription、NSCameraUsageDescription、NSPhotoLibraryAddUsageDescription(ios11)
3.添加lib库:Photos.framework
动态配置plist相关,可以看这篇博客
以下是ios部分代码
//
// IOSCustomEmoji.h
// Unity-iPhone
//
// Created by akb on 2018/12/19.
//
#ifndef IOSCustomEmoji_h
#define IOSCustomEmoji_h
#import <UIKit/UIKit.h>
#endif /* IOSCustomEmoji_h */
@interface IOSCustomEmoji : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
{
}
-(void) openMenu;
+(void) saveImageToPhotosAlbum : (NSString*) p1;
@end
//
// IOSCustomEmoji.m
// Unity-iPhone
//
// Created by akb on 2018/12/19.
//
#import "IOSCustomEmoji.h"
#import <AVFoundation/AVFoundation.h>
#import <Photos/PHPhotoLibrary.h>
@implementation IOSCustomEmoji
#if defined (__cplusplus)
extern "C"
{
#endif
//打开菜单
void _openPicture()
{
NSLog(@"_openPicture");
IOSCustomEmoji *app = [[IOSCustomEmoji alloc] init];
UIViewController *viewController = UnityGetGLViewController();
[viewController.view addSubview:app.view];
[app openMenu];
}
//保存图片
void _saveImageToPhotoAlbum(char* addr)
{
NSLog(@"_saveImageToPhotoAlbum");
NSString *value = [NSString stringWithUTF8String:addr];
[IOSCustomEmoji saveImageToPhotosAlbum:value];
}
#if defined (__cplusplus)
}
#endif
-(void)openMenu
{
UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:@"选择图像" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
// 创建action,这里action1只是方便编写,以后再编程的过程中还是以命名规范为主
UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[self takePhoto];
NSLog(@"打开照相机拍照");
}];
UIAlertAction *action2 = [UIAlertAction actionWi