WWDC2020で Video materials が発表されました。こちらの動画 "What's new in RealityKit" で映像付きで解説されています。RealityKitでオブジェクトに動画を設定し再生できる新機能です。
この機能だけ試したくなりましたが、RealityKitで新規プロジェクト作成すると Experience.rcproject
を読み込んで別シーンを表示する構成で簡単には試せません。そこでシンプルに平面を配置し動画を流すまでの部分を作成してみました。
AR空間に配置されたPlaneで自動的に動画を再生します。
ソースコードは こちら に置いています。
環境
- Xcode 12.0 beta 2
- iPadOS 14 beta
- iPad Pro 11 inch (第2世代)
プロジェクト作成
今回は Content Technology
を RealityKit
で、Interface
をStoryboard
で作成しました。
video001.mp4
をプロジェクトに追加しておきます。
実装
ソース全体
import UIKit
import RealityKit
import AVFoundation
class ViewController: UIViewController {
@IBOutlet private var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
// ① Anchorの追加
let anchor = AnchorEntity()
arView.scene.anchors.append(anchor)
// ② Playerの生成と動画再生
let asset = AVURLAsset(url: Bundle.main.url(forResource: "video001", withExtension: "mp4")!)
let playerItem = AVPlayerItem(asset: asset)
let player = AVPlayer()
player.replaceCurrentItem(with: playerItem)
player.play()
// ③ Plane生成とVideoMaterial設定
let planeMesh = MeshResource.generatePlane(width: 0.8, height: 0.45)
let material = VideoMaterial(avPlayer: player)
let planeModel = ModelEntity(mesh: planeMesh, materials: [material])
planeModel.position = SIMD3<Float>(0.0, 0.0, -1.0)
anchor.addChild(planeModel)
}
}
① Anchorの追加
ARViewに対してAnchorを追加。
② Playerの生成と動画再生
再生対象の動画からAVPlayerItem
を生成。AVPlayer
に設定しplay()
で再生開始。
③ Plane生成とVideoMaterial設定
MeshResource.generatePlane
でPlaneを生成。数値は現実世界でメートルです。これにより「0.8m x 0.45m の横長の板」が生成されます。VideoMaterial
を生成後、ModelEntity
でEntity
生成。positionはzに-1.0を設定し「1メートル手前」を設定。anchorにaddChild
で追加。
この状態で起動すると
無事再生されました!