iOS で SceneKit を試す(Swift 3) その11 - Scene Editor を使ってみる
今まではコードから SCNScene のクラスを使用してシーンを作成していたが、SceneKit にはもう1つ作成方法があり今回はそちらのご紹介。
Xcode に Scene Editor というツールがあり、Unity のエディタのようなもの。 オブジェクトを視覚的置いたり、アニメーションを確認したりできる。
Xcode の Game テンプレートでこちらを使用している
プロジェクトの作成
ということで、今回も Single View Application のテンプレートからつくる。

名前は何でも良いが、とりあえず SceneEditor という名前にした。
Storyboard の編集
以前と同様に Main.storyboard を開き、
View を SCNView に変更する。

ViewController.swift の編集
こちらも、以前と同様に SceneKit をインポートして、
まず、空のシーンを置き、タップジェスチャーを追加してみる。
import UIKit
import SceneKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// シーン設定
let scene = SCNScene()
// SCNView 設定
let scnView = self.view as! SCNView
scnView.backgroundColor = UIColor.black
scnView.scene = scene
scnView.showsStatistics = true
scnView.allowsCameraControl = true
// タップジェスチャー
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
scnView.addGestureRecognizer(tapGesture)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func handleTap(_ gestureRecognize: UIGestureRecognizer) {
print("タップされました")
}
}
ビルドすると下にっ統計情報が表示される

新規で SceneKit Scene(scn)ファイルをつくり編集してみる
新規作成 (Command + N) から iOS タブの「SceneKit Scene File」を選択。
今回はファイル名を main.scn にしてみた。

するとこんな画面が表示される。

そのままだと、構造がわからないので Editor > Show Document Outline か、左下のアイコンをクリック。
Outline にカメラがあることが確認できる。

シーンエディターに球とライトを配置する
球を配置してみる
右下のから Object Library (Commnd + Option Control + 3)を開き、「Shpere」 探し、シーンへドラッグする。

白く丸い球体が表示されたと思う。

そのままだと適当な位置に配置されてしまうので、Object Library の上にある立方体のアイコン Node Inspector (Commnd + Option Control + 3)を押して、ノードの情報を表示。 X、Y、Z を 0 にしてみる。

ライトを配置してみる
手順は同じ。
Object Library から Omni Light をドラッグして、Node Inspector で Y を 10 にしてみる。
| X | Y | Z |
|---|---|---|
| 0 | 10 | 0 |

準備完了したのでソースから scn ファイルを読み込んでみる
ViewController.swift を再編集して scn ファイルを読み込む
SCNScene から先程つくった scn ファイルを読み込んで表示させる。 1行変えるだけ。
こちらを
let scene = SCNScene()
こちらに変更。今回名前を main.scn にしたので、この名前で読み込む。
let scene = SCNScene(named: "main.scn")!
ビルドする scn ファイルに配置したものが表示されるかはず。

Scene Editor の中のものが表示されるのでわかりやすいかと。
今回はここまで。