在unity游戏的开头播放视频 , 根据需求 , 最后决定用 MPMoviePlayerController 来实现播放, 实现如下: by Tin
需要在AppController.mm的 OpenEAGL_UnityCallback 修改下view的大小
UIView *mainView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; // mainView.backgroundColor = [UIColor grayColor]; [MyViewController Instance].view = mainView; [UnityGetGLViewController().view addSubview: [MyViewController Instance].view];
需要在游戏中接收unity的命令
// ======================== 播放开头动画 start ======================== // by:xihao // 2014-05-16 void PlayMovieInIOS( char * path ) { [[MyViewController Instance] PlayVideo:[NSString stringWithUTF8String:path]]; } void exPlayVideo( char * url ) { [[MyViewController Instance] PlayVideo:[NSString stringWithUTF8String:url]]; } void exReleaseVideo() { [[MyViewController Instance] ReleaseVideo]; } MovieViewController * mv ; -(void) PlayVideo:(NSString *) path { if ( mv != nil) { [mv breakMovie] ; [mv release]; mv= nil ; } mv = [[ MovieViewController alloc] init]; [self.view addSubview:mv.view]; [mv playMovie:path]; } -(void) ReleaseVideo { if ( mv != nil) { [mv breakMovie] ; [mv release]; mv= nil ; } UnitySendMessage("_IOSDoor","ReleaseVideoOver", ""); } // ======================== 播放开头动画 end ========================
接下来是播放视频
MPMoviePlayerController *movie ; /** @method 播放电影 */ -(void)playMovie:(NSString *)fileName{ NSURL *url = [NSURL fileURLWithPath: fileName ]; //视频播放对象 movie = [[MPMoviePlayerController alloc] initWithContentURL:url]; movie.controlStyle = MPMovieControlStyleNone; [movie.view setFrame:self.view.bounds]; movie.initialPlaybackTime = -1; [self.view addSubview:movie.view]; // 注册一个播放结束的通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMovieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:movie]; [movie play]; } #pragma mark -------------------视频播放结束委托-------------------- -(void) breakMovie { if (movie == nil) { return ; } //销毁播放通知 [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:movie]; [movie.view removeFromSuperview]; // 释放视频对象 [movie release]; movie = nil ; } /* @method 当视频播放完毕释放对象 */ -(void)myMovieFinishedCallback:(NSNotification*)notify { NSNumber *reason = [notify.userInfo valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey]; if (reason != nil){ NSInteger reasonAsInteger = [reason integerValue]; switch (reasonAsInteger){ case MPMovieFinishReasonPlaybackEnded:{ /* The movie ended normally */ break; } case MPMovieFinishReasonPlaybackError:{ /* An error happened and the movie ended */ break; } case MPMovieFinishReasonUserExited:{ /* The user exited the player */ break; } } NSLog(@"Finish Reason = %ld", (long)reasonAsInteger); } /* 取消视频自动销毁 由break mv 执行 //视频播放对象 MPMoviePlayerController* theMovie = [notify object]; //销毁播放通知 [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie]; [theMovie.view removeFromSuperview]; // 释放视频对象 [theMovie release]; movie = nil ; NSLog(@"---------PlayVideoOver 11"); */ UnitySendMessage("_IOSDoor","PlayVideoOver", ""); NSLog(@"---------PlayVideoOver 22"); }