我终于解决了。
我们必须删除 CardboardAppController 和 MMTAppController 并将它们合并为一个。
在 Assets/Plugin/ios 中基本上有 2 个 AppController:“CardboardAppController.mm”(也有 CardboardAppController.h 标头)和“MMTAppController.mm”
诀窍在于 ios 在生成后只能“看到”一个应用控制器。由于 CardboardAppController 先出现,MMTAppController 被丢弃。
为了解决这个问题,我做了以下工作:
创建新的 AppController:在我的例子中,它被命名为 SVAppController.mm 和 SVAppController.h
然后我们必须将两个应用控制器合并到那个中并删除它们。
所以我将 CardboardAppController.h 的内容复制粘贴到 SVAppController.h 中,并将 CardboardAppController.mm 的内容复制到 SVAppController.mm 中(确保将代码中的名称更改为 SVAppController 替换 CardboardAppController em>)
然后将 MMTAppController.mm 的内容复制过去到 SVAppController.mm 在正确的位置
最后删除 CardboardAppController 和 MMTAppController。
您将剩下 1 个应用控制器,一切都应该正常工作。
供参考
这是我最终的 SVAppController:
SVAppController.h
#import "UnityAppController.h"
#import "UnityAppController+Rendering.h"
#import "UnityAppController+ViewHandling.h"
// Unity 4.6.2 added a category to the app controller.
#if UNITY_VERSION < 462
#import "UnityInterface.h"
#else
#import "UnityAppController+UnityInterface.h"
#endif
// Unity 4 used a different method name to create the UnityView.
#if UNITY_VERSION < 500
#define createUnityView initUnityViewImpl
#endif
@interface SVAppController : UnityAppController
- (void)preStartUnity;
- (UnityView *)createUnityView;
- (void)startSettingsDialog:(UIViewController *)dialog;
- (void)stopSettingsDialog;
- (void)pause:(bool)paused;
- (void)shouldAttachRenderDelegate;
@end
SVAppController.mm
#import "SVAppController.h"
#import "CardboardView.h"
#import <UIKit/UIKit.h>
extern "C" {
extern void readProfile();
extern void syncProfile();
extern "C" void MMTUnitySetGraphicsDevice(void* device, int deviceType, int eventType);
extern "C" void MMTUnityRenderEvent(int marker);
extern UIViewController* createSettingsDialog(id app);
extern UIViewController* createOnboardingDialog(id app);
bool isOpenGLAPI() {
#if UNITY_VERSION < 463
return true;
#else
SVAppController* app = (SVAppController *)GetAppController();
UnityRenderingAPI api = [app renderingAPI];
return api == apiOpenGLES2 || api == apiOpenGLES3;
#endif
}
void launchSettingsDialog() {
SVAppController* app = (SVAppController *)GetAppController();
[app startSettingsDialog:createSettingsDialog(app)];
}
void launchOnboardingDialog() {
SVAppController* app = (SVAppController *)GetAppController();
[app startSettingsDialog:createOnboardingDialog(app)];
}
void endSettingsDialog() {
SVAppController* app = (SVAppController *)GetAppController();
[app stopSettingsDialog];
}
} // extern "C"
@implementation SVAppController
- (void)preStartUnity {
[super preStartUnity];
syncProfile();
}
- (UnityView *)createUnityView {
return [[CardboardView alloc] initFromMainScreen];
}
- (void)startSettingsDialog:(UIViewController*)dialog {
[self pause:YES];
[self.rootViewController presentViewController:dialog animated:NO completion:nil];
}
- (void)stopSettingsDialog {
[[self rootViewController] dismissViewControllerAnimated:NO completion:nil];
[self pause:NO];
}
- (void)pause:(bool)paused {
#if UNITY_VERSION < 462
UnityPause(paused);
#else
self.paused = paused;
#endif
}
- (void)shouldAttachRenderDelegate;
{
UnityRegisterRenderingPlugin(&MMTUnitySetGraphicsDevice, &MMTUnityRenderEvent);
}
@end
IMPL_APP_CONTROLLER_SUBCLASS(SVAppController)