В настоящее время я работаю над функцией приложения, где пользователи могут делать снимки (или снимки экрана) с экрана, разработанного в Unity.Файл был экспортирован из Unity и в приложение iOS, если это возможно, есть ли способ кодировать эту функцию с помощью Obj-C?Потому что я не хочу менять коды в файле Unity, который использует # C.
Ниже показано, как выглядит экран
Экран с черным 3DСобака сделана в Unity, но строка ниже со значком камеры была закодирована в XCode с помощью Obj-C.
Я хочу, чтобы пользователи могли нажимать на значок камеры и делать снимок экрана или снимок экрана.выше.Но сейчас, после того, как я щелкну по значку камеры, все полученное изображение становится черным.
Я попробовал 2 из этих методов, но оба они не сработали:
1.use UIGraphicsBeginImageContextWithOptions (thisметод сохраняет сделанный снимок как полностью черный, за исключением полосы внизу со значком камеры)
-(void)fullScreenshots{
UIGraphicsBeginImageContextWithOptions([MyDataManager sharedManager].myWindow.rootViewController.view.bounds.size, NO, [UIScreen mainScreen].scale);
[[MyDataManager sharedManager].myWindow.rootViewController.view.layer renderInContext:UIGraphicsGetCurrentContext()];
PHimg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(PHimg, nil, nil, nil);
}
использовать AVFoundation (этот метод может открыть камеру телефона, но перекрывает файл Unity, что означает, что вы не сможете просматривать 3D-черную собаку)
-
//open unity
- (IBAction)startUnity:(id)sender {
//create AVCaptureVideoPreviewLayer
AVCaptureVideoPreviewLayer *myPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:myCaptureSession];
[myPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
CGRect rect = CGRectMake(160, 280, 320, 240);
[myPreviewLayer setBounds:rect];
UIView *myView = [[UIView alloc]initWithFrame:rect];
[myView.layer addSublayer:myPreviewLayer];
[pauseUnityView1 addSubview:myView];
[myCaptureSession startRunning];
}
func
for (AVCaptureConnection *connection in myStillImageOutput.connections) {
for (AVCaptureInputPort *port in [connection inputPorts]) {
if ([[port mediaType] isEqual:AVMediaTypeVideo]) {
myVideoConnection = connection;
break;
}
}
}
//catch the image
[myStillImageOutput captureStillImageAsynchronouslyFromConnection:myVideoConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
if (imageDataSampleBuffer) {
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
//catch static image
UIImage *myImage = [[UIImage alloc] initWithData:imageData];
[self setImage:myImage];
//catch image data
CFDictionaryRef myAttachments = CMGetAttachment(imageDataSampleBuffer, kCGImagePropertyExifDictionary, NULL);
}
}];