iOS 9のReplayKitでゲームプレー動画を撮影&シェアiOS SDKとSwiftで始めるゲーム作成入門(7)(4/4 ページ)

» 2016年07月13日 05時00分 公開
[杉本裕樹マネーフォワード]
前のページへ 1|2|3|4       

ReplayKitでプレー動画の撮影&シェア

 最後に、iOS 9から追加されたReplayKitというフレームワークを使ってプレー動画の撮影とシェアをできるようにします。

ReplayKit.frameworkをプロジェクトに追加

 まずはReplayKit.frameworkをプロジェクトに追加します。プロジェクト設定の「General」→「Linked Frameworks and Libraries」からReplayKit.frameworkを追加してください。

撮影開始処理を追加

 SetCharScene.swiftに撮影開始処理を追加します。

import ReplayKit
 
class SetCharScene: SKScene {
    // 省略
 
    override func didMoveToView(view: SKView) {
        // 省略
 
        if !RPScreenRecorder.sharedRecorder().recording {
            RPScreenRecorder.sharedRecorder().startRecordingWithMicrophoneEnabled(false, handler: { error in
            })
        }
    }
 
    // 省略
}

撮影完了処理とシェア機能を追加

 次に撮影完了処理とシェア機能を追加します。GameScene.swiftを以下のように修正してください。

import ReplayKit
 
class GameScene: SKScene, SKPhysicsContactDelegate {
    // 省略
 
    override func update(currentTime: NSTimeInterval) {
        chars.forEach { char in
            char.stateMachine.updateWithDeltaTime(currentTime)
            if let charState = char.stateMachine.currentState as? Char.CharState where charState.enableToAttack() {
                enemyList.enemiesCloseToPoint(char.frame.origin, distance: 50).forEach {
                    $0.life -= charState.power
                    char.stateMachine.enterState(Char.StayState.self)
                    if $0.life <= 0 {
                        $0.physicsBody?.node?.removeFromParent()
                        $0.physicsBody?.node?.removeAllActions()
 
                        if enemyList.isAllEnemyRemoved() {
                            // 省略
 
                            let rootViewController = UIApplication.sharedApplication().delegate?.window??.rootViewController
                            RPScreenRecorder.sharedRecorder().stopRecordingWithHandler { viewController, error in
                                viewController?.previewControllerDelegate = self
                                rootViewController?.presentViewController(viewController!, animated: true, completion: nil)
                            }
                        }
                    }
                }
            }
        }
    }
 
    // 省略
}
 
extension GameScene: RPPreviewViewControllerDelegate {
    func previewControllerDidFinish(previewController: RPPreviewViewController) {
        dispatch_async(dispatch_get_main_queue(), {
            previewController.dismissViewControllerAnimated(true, completion: nil)
        })
    }
}

 以上で撮影機能とシェア機能の実装が完了しました。

ReplayKitの機能の実行確認

 この状態で起動すると、最初に撮影許可ポップアップが出てきます。ちなみにシミュレーターではReplayKitが使えないので、試すときは実機を使うようにしてください。

 許可のポップアップは1回OKを押すと2回目以降は確認せずに撮影します。もし1回目で撮影許可しなかった場合は、2回目以降も確認ポップアップが現れます。そしてプレーが完了すると以下のように動画プレビュー画面が表示されます。

 左下のメニューからFacebookやTwitterへのシェアを行えます。

動画にマイク音声も入力可能

 startRecordingWithMicrophoneEnabledの第1引数をtrueにすれば、動画にマイク音声も入力可能です。実況動画を撮るときに便利そうな機能です。

RPScreenRecorder.sharedRecorder().startRecordingWithMicrophoneEnabled(true, handler: { error in
})

 マイク付きで起動すると先ほどと少し違うポップアップが表示されます。

次回は、Swift 3.0に対応

 今回はReplayKitという新しい機能を使ってみましたがいかがでしたでしょうか?

次回はこのプロジェクトを、2016年秋リリースといわれているSwift 3.0に対応しようと思いますので、どうぞお楽しみに。

 今回実装したソースコードは、こちらからダウンロードできます。

筆者紹介

杉本裕樹

田町のベンチャーで働くエンジニア。

仕事ではiPhoneアプリの開発やRailsを使ったWebサービス開発を行っている。最近のマイブームはUnityを使った3Dゲーム開発。


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。