検索
連載

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

iPhoneゲームをSwift言語で作成してみたいという初心者向けにiOSのゲームフレームワークを使った作り方を一から解説する入門連載。今回は、ステージを1から3に増やし、出てくる敵の種類もステージに応じて変わるようにします。さらに「ReplayKit」というフレームワークも使ってプレー動画の撮影・共有機能を実装します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

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ゲーム開発。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る