Переменная доступа Unity3D, установленная через XCode

1

Я создаю приложение, которое использует камеру устройств. Мне нужно реализовать функцию, которая проверяет, разрешил ли пользователь приложению доступ к камерам устройств, если они этого не сделали, сцена, использующая камеру, просто показывает черный экран.

Поскольку Unity поддерживает только Application.HasUserAuthorization в платформе webplayer, мне нужно добавить проверку авторизации в проект через XCode после сборки.

Во-первых, я добавил следующий код для didFinishLaunchingWithOptions в файле UnityAppController.mm:

// Determine camera access on iOS >= 7
if ([AVCaptureDevice respondsToSelector:@selector(requestAccessForMediaType:completionHandler:)]) {
    // Completion handler will be dispatched on a separate thread
    [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
        if (YES == granted) {
            // User granted access to the camera, continue with app launch
            CameraIsAvailable = YES;
            CameraCheckDone = YES;
        }
        else {
            CameraIsAvailable = NO;
            CameraCheckDone = YES;

        }

    }];
}

else {
    // iOS < 7 (camera access always OK)
    CameraCheckDone = YES;
    // Continue with app launch...
}

и последующий код для applicationDidBecomeActive

while (!CameraCheckDone) { }
    if(!CameraIsAvailable){
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Authorize Camera"
                                                            message:@"Instructions go here"
                                                           delegate:self
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
        [alertView show];
        [alertView release];

    }

В результате каждый раз, когда приложение запускается, появляется всплывающее окно с инструкцией пользователю активировать камеру, что происходит, но у них все еще есть доступ к сцене, которая показывает черный экран вместо просмотра камеры.

Есть ли способ получить доступ к переменной CameraIsAvilable из Unity?

Любые предложения будут ценны! ТИА!

Теги:
unity3d
xcode

1 ответ

2
Лучший ответ

Я решил проблему, используя функцию UnitySendMessage.

Во-первых, я обновил didFinishLaunchingWithOptions в UnityAppController.mm, вот модифицированный код:

// Determine camera access on iOS >= 7
if ([AVCaptureDevice respondsToSelector:@selector(requestAccessForMediaType:completionHandler:)]) {
    // Completion handler will be dispatched on a separate thread
    [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
        if (YES == granted) {
            // User granted access to the camera, continue with app launch
            CameraIsAvailable = YES;
            CameraCheckDone = YES;

// ADDED THE FOLLOWING LINE THAT SENDS VALUE "YES" WHEN CAMERA ALLOWED
            UnitySendMessage("iOSManager", "cameraCheck", "YES");
        }
        else {
            CameraIsAvailable = NO;
            CameraCheckDone = YES;
// ADDED THE FOLLOWING LINE THAT SENDS VALUE "NO" WHEN CAMERA IS NOT ALLOWED
            UnitySendMessage("iOSManager", "cameraCheck", "NO");

        }

    }];
}

else {
    // iOS < 7 (camera access always OK) 
    CameraCheckDone = YES;
    // Continue with app launch...
}

Затем в Unity3D я добавил GameObject под названием " iOSManager " к первой сцене моей игры (примечание: имя GameObject должно соответствовать первому параметру функции UnitySendMessage).

Я создал следующий скрипт с функцией cameraCheck() (имя функции соответствует второму параметру функции UnitySendMessage):

#if UNITY_IOS
void cameraCheck(string value)
{
    // DO SOMETHING WITH VALUE
}
#endif

Если строка "value" - это значение, отправленное из UnitySendMessage

Теперь я могу использовать это значение в Unity3D

  • 0
    Потрясающие. Это то, что мне было нужно!
  • 0
    Рад, что это помогло вам! :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню