何がしたかったか
iPhone上で、ARで、動画再生をしたかったのですが、
なかなか手ごわい部分があったので、解決方法を含めて共有します。
使用したライブラリについて
-
Unity
これは皆さんお馴染かと思いますので、説明は割愛します。
http://japan.unity3d.com/ -
Mobile Movie Texture(MMT)
モバイル端末上で動画再生するための有料のUnityAssetです。
https://www.assetstore.unity3d.com/jp/#!/content/2449 -
Vuforia
PTC社が提供しているAR向けライブラリです。Android/iOS両方で手軽に使用できるARライブラリです。
ウォーターマーク入りの無料版から、有料プランまで揃っています。
https://developer.vuforia.com/
ARやモバイル端末上での動画再生を実現させるには、他にもいくつかオプションがありますが、
本稿では上記のアセットを利用した際に陥りやすい問題と、その解決方法について記載します。
#VuforiaとMMTを共存させる
プラグインに含まれるVuforiaNaviveRendererController.mmと、
MMTAppController.mmをマージする必要があります。
マージの情報は、MMTのフォーラムにも投稿がありますが、古いバージョンに対するもので、
そのままコピペしても動作しません。
##マージ方法
- VuforiaNativeRendererController.mmを削除
- 残った方に以下のソースをコピペ
#import <UIKit/UIKit.h>
#import "UnityAppController.h"
#import "VuforiaRenderDelegate.h"
extern "C" void MMTUnitySetGraphicsDevice(void* device, int deviceType, int eventType);
extern "C" void MMTUnityRenderEvent(int marker);
extern "C" void VuforiaRenderEvent(int marker);
@interface MMTAppController : UnityAppController
{
}
- (void)shouldAttachRenderDelegate;
@end
@implementation MMTAppController
- (void)shouldAttachRenderDelegate;
{
self.renderDelegate = [[VuforiaRenderDelegate alloc] init];
UnityRegisterRenderingPlugin(NULL, &VuforiaRenderEvent)
UnityRegisterRenderingPlugin(&MMTUnitySetGraphicsDevice, &MMTUnityRenderEvent);
}
@end
IMPL_APP_CONTROLLER_SUBCLASS(MMTAppController)
今回はVuforiaNativeRendererController.mmを削除して
MMTAppController.mmに記述していますが、どちらでも構いません。
(その場合、適宜修正してください)
#armv7をビルドターゲットから除外する
全くスマートじゃない解決方法ですが、libtheorawrapper関連がビルド時にエラーを吐くので、
とりあえずarmv7をビルドターゲットから除外することで回避できます。
恐らく、もっとちゃんとした解決方法があると思いますので、ご存知の方はフォローお願いします……
#VuforiaのPlugin設定
Vuforiaを使用したプロジェクトでは、UnityEditor上で以下の作業を行わないと
CodeSign Failedのエラーで、Xcode上のValidateやExportに失敗します。
##Platforms for pluginの変更
- UnityEditorのProjectタブからPlugins > QCARWrapperを選択
- Inspector上でAny PlatformになっているのをEditor + Standaloneに変更する
上記の対応を行うことで、実機動作が確認できました。