watchOSでSceneKitを利用する
watchOS 3から(最新は6なので、3年前から)SceneKitの利用が可能になった。実際に使ってみたメモ。
## WKInterfaceSCNScene
watchOSにはUIKitはないので、SCNViewは使えない。その代わりとなるのがWKInterfaceSCNSceneクラス。SceneKit関連でwatchOS独自のクラスがあるとすればこれだけ。
class WKInterfaceSCNScene : WKInterfaceObject, SCNSceneRenderer
SCNViewやSCNRenderer同様、SCNSceneRendererプロトコルに準拠している。
WKInterfaceSCNScene自体に定義されているプロパティ・メソッドはこれで全部。
var scene: SCNScene?
func snapshot() -> UIImage
var preferredFramesPerSecond: Int
var antialiasingMode: SCNAntialiasingMode
## 実装方法
storyboardからWKInterfaceSCNSceneオブジェクトを追加して、
@IBOutlet var sceneInterface: WKInterfaceSCNScene!
このプロパティに接続。
あとはSCNSceneを渡してやるだけ。
sceneInterface.scene = SCNScene(named: "model.scnassets/ship.scn")!
ちなみにシーンファイルはExtension側に置く。
以上で動く。
FPS等の情報を表示したり、FPSを指定したり、デバッグオプション(SCNDebugOptions)を指定したりもできる。
sceneInterface.showsStatistics = true
sceneInterface.preferredFramesPerSecond = 60
sceneInterface.debugOptions = [.showWireframe]
## watchOSでもシェーダーを使えるのか?
watchOSではMetalフレームワークやOpenGL ESフレームワークを(サードパーティーデベロッパーは)使えない。従って、SCNProgramは使えないようだ。
しかし、SCNShadableプロトコルはサポートされている。SCNProgram型のprogramプロパティはないが、shaderModifiersプロパティはwatchOSにもある。SceneKitのドキュメントは間違いだらけなので、これもなにかの間違いでは・・・
そう思って簡単なシェーダーを書いて試してみたところ・・・
なんと動いた・・・!
以下、shaderModifiersが動くか試した際のコード:
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/