gpt4 book ai didi

c# - Unity3D通过Xcode访问变量集

转载 作者:行者123 更新时间:2023-11-29 10:37:23 26 4
gpt4 key购买 nike

我正在创建一个使用设备摄像头的应用程序。我需要实现一个功能来检查用户是否允许应用程序访问设备相机,如果没有,使用相机的场景只会显示黑屏。

由于Unity在webplayer平台只支持Application.HasUserAuthorization,所以需要在build后通过XCode给项目添加授权检查。

首先,我在 UnityAppController.mm 文件中的 didFinishLaunchingWithOptions 中添加了以下代码:

// 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];

}

结果是每次应用运行时,都会出现一个弹出窗口,指示用户激活相机,这是一个进步,但他们仍然可以访问显示黑屏而不是相机 View 的场景。

有什么方法可以让我从 Unity 中访问 CameraIsAvilable 变量?

如有任何建议,我们将不胜感激! TIA!

最佳答案

我使用UnitySendMessage 函数解决了这个问题。

首先我更新了UnityAppController.mm中的didFinishLaunchingWithOptions,这里是修改后的代码:

// 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 中,我在游戏的第一个场景中添加了一个名为“iOSManager”的游戏对象(注意:游戏对象名称必须与 UnitySendMessage 函数的第一个参数匹配)。

我使用 cameraCheck() 函数创建了以下脚本(函数名称与 UnitySendMessage 函数的第二个参数匹配):

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

其中字符串“value”是UnitySendMessage发送的值

现在我可以在 Unity3D 中使用这个值

关于c# - Unity3D通过Xcode访问变量集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26215802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com