1

Unity3D (アニメーションを含む) によって生成された xCode プロジェクトがあり、アニメーション (拡張現実) を表示するために vforia SDK を統合しました。

今までに得た問題は、カメラ画面とアプリのダッシュボードの間のナビゲーションを追加することです。

メソッドではint OpenEAGL_UnityCallback(UIWindow** window, int* screenWidth, int* screenHeight, int* openglesVersion)、次のように実用的に戻るボタンを追加しています。

if (wrapperObj == nil)
{
    wrapperObj = [[WrapperClass alloc] init];
}

[backButton addTarget:wrapperObj action:@selector(goToDashBoard:) forControlEvents:UIControlEventTouchUpInside];

ラッパークラスに渡す

@interface WrapperClass : NSObject

@property (nonatomic, retain) UINavigationController *navigation;

-(void)goToDashBoard:(UIButton*)sender;

@end

void goToPreviousScreen()
{

}

@implementation WrapperClass
@synthesize navigation;

-(void) goToDashBoard:(UIButton*)sender
{
    [[self navigation] popViewControllerAnimated:YES];
    goToPreviousScreen();
}

@end

ナビゲーションを起動して実行する方法を誰かに教えてもらえますか?

アップデート

この方法でビューをポップしようとすると:

AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.navigationController popToRootViewControllerAnimated:YES];

私はこのログを取得します:

2012-12-05 16:20:45.502 arapp[5993:907] <HomeViewController: 0x246db00>

StopQCAR

(Filename: /Applications/buildAgent/work/14194e8ce88cdf47/Runtime/ExportGenerated/iPhonePlayer-armv7/UnityEngineDebug.cpp Line: 43)

Could not deactivate dataset.

(Filename: /Applications/buildAgent/work/14194e8ce88cdf47/Runtime/ExportGenerated/iPhonePlayer-armv7/UnityEngineDebug.cpp Line: 43)

Could not destroy dataset.

(Filename: /Applications/buildAgent/work/14194e8ce88cdf47/Runtime/ExportGenerated/iPhonePlayer-armv7/UnityEngineDebug.cpp Line: 43)

Could not deinitialize the tracker.

(Filename: /Applications/buildAgent/work/14194e8ce88cdf47/Runtime/ExportGenerated/iPhonePlayer-armv7/UnityEngineDebug.cpp Line: 43)

Could not deinitialize the tracker. 

(Filename: /Applications/buildAgent/work/14194e8ce88cdf47/Runtime/ExportGenerated/iPhonePlayer-armv7/UnityEngineDebug.cpp Line: 43)

ghashtable.c:294: assertion 'hash != NULL' failed
4

1 に答える 1

1

私があなたの質問を正しく理解していれば、ファイル、viewcontroller、コードなどを追加して、Unity でビルドされた Xcode プロジェクトを変更しようとしています。私の経験では、これは良い考えではなく、できる限り Unity でアプリを構築したほうがよいかもしれません。Vuforia のフォーラムのモデレーターも、これを強く思いとどまらせています。私はこの方法で Unity/Vuforia アプリを作成しました。これは主に、Unity で C# を使用する方法を学ぶのに時間を費やすのを避けるためです。結局、追跡できないメモリリークが発生し、弾丸を噛んでUnityに戻り、Unityスクリプトを学ぶ必要がありました. もちろん、Unity でできない iOS のことはたくさんあります。私はあなたのアプリが何をしているのかわかりませんが、あなたを助けることができるプラグインはたくさんあります。必要だった。

ただし、AR ビューと他のビュー コントローラーの間を移動したい場合は、基本的にオーバーレイであり、ナビゲーション用のボタンだけを含む別のビュー コントローラーを作成する方法で行いました。次に、それを初期化し、サブビューとして UnityViewController に追加しました。次に、ダッシュボードなど、任意のビューに移動するためのコードを追加します。

// Init Vuforia VC, then add its view as subview  to "view" AR view, line 524
VuforiaViewController *vuforia = [[VuforiaViewController alloc] init];

// Create a full-screen window
_window = [[UIWindow alloc] initWithFrame:rect];
EAGLView* view = [[EAGLView alloc] initWithFrame:rect];
UnityViewController *controller = [[UnityViewController alloc] init];

sGLViewController = controller;
sGLView = view;



controller.view = view;

_splashView = [ [UIImageView alloc] initWithFrame: [[UIScreen mainScreen] bounds] ];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    _splashView.image = [UIImage imageNamed:SplashViewImage(UIInterfaceOrientationPortrait)];
}
else
{
    _splashView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    _splashView.autoresizesSubviews = YES;
}




[view addSubview:_splashView];
[view addSubview:vuforia.view];     // Overlay view added as subview of AR view

ご存知かもしれませんが、AppController で startUnity() をコメントアウトして、アプリの起動時に AR ビューが表示されないようにし、別の VC でそれを呼び出して AR ビューに戻ることができます。このアプローチにより、AR ビューと他のいくつかの VC の間を移動できましたが、最終的にアプリが不安定になり、完全に Unity で構築されたものに置き換える必要がありました。より良い方法を見つけることができるかもしれませんが、アプリに何をさせたいかによっては、Unity とプラグインに飛び込む方が良いかもしれません。お役に立てれば。

于 2012-12-10T15:46:26.330 に答える