Как добавить функцию скриншота на экран, созданный с помощью Unity в iOS? - PullRequest
0 голосов
/ 09 октября 2018

В настоящее время я работаю над функцией приложения, где пользователи могут делать снимки (или снимки экрана) с экрана, разработанного в 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);


    }
}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...