我正在尝试为Unity3d iOS编写一个简单的插件,您可能已经听说过那个流视频。我真的设法做到这一点,流视频位的作品。在extern“C”块中定义一个能够引用外部方法的类
现在,我正在尝试添加插件的功能,以检测滑动手势并向Unity发送消息。我没有使用Objective C的经验,而且目前对学习这些细节并不感兴趣,因为我只想为这个特定问题寻找解决方案。
所以我设法谷歌所需的所有东西流实际的视频,也注册滑动手势的一些代码。问题在于,在定义UISwipeGestureRecognizer时,您需要为其分配一个操作方法。但是执行视频流的功能是在extern“C”块中定义的,这个块需要在Unity中引用。
分配给手势识别器的方法虽然必须在iOS应用程序的常规框架中定义(我认为),但是我的怀疑是这会产生手势识别器类不知道外部定义的方法的问题外部“C”块。
所以,现在当我运行它,视频开始流式传输,但只要我开始刷屏幕,它全部崩溃。大概是因为指定的方法不能被引用是我的猜测。
我的问题是......我如何做到这一点,也许有一些明显的东西我不知道?重要的是使它在一个在extern“C”块中定义的函数中工作,因为Unity毕竟是必需的。
这是实际的代码,我放在一起至今:
http://www.hastebin.com/ragocorola.m < - 完整的代码
要揣loadLevel方法究竟应该如何申报?
extern "C" {
void _playVideo(const char *videoFilepath)
{
NSURL *url = [NSURL URLWithString:CreateNSString(videoFilepath)];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc]
initWithContentURL:url];
player.controlStyle = MPMovieControlStyleFullscreen;
player.view.transform = CGAffineTransformConcat(player.view.transform,
CGAffineTransformMakeRotation(M_PI_2));
UIWindow *backgroundWindow = [[UIApplication sharedApplication] keyWindow];
[player.view setFrame:backgroundWindow.frame];
[backgroundWindow addSubview:player.view];
UISwipeGestureRecognizer * swipe = [[UISwipeGestureRecognizer alloc]
initWithTarget:swipe action:@selector(loadLevel:)];
[swipe setDirection:(UISwipeGestureRecognizerDirectionUp |
UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionLeft
|UISwipeGestureRecognizerDirectionRight)];
[player.view addGestureRecognizer:swipe];
[player play];
}
}
在你的代码中有一条评论说'extern C'块只需要在.mm或者.cpp文件中。你有一个.m文件,那么它是绝对必要的? – SevenBits
Extern C块是必需的,以便在Unity3D中使用该函数。它不是一个.m文件,它是一个.mm文件,这就是巧合生成的链接hastebin。我的Xcode项目中的文件名称叫做VideoPlugin。mm – Balthatczar
此功能在Unity3D中的代码中引用如下: [DllImport(“__Internal”)] private static extern void _playVideo(string videoFilepath); – Balthatczar