【Swift】SpriteKitの使い方。シーンエディタで非表示アクションを設定する。(Swift 2.2、XCode 7.3)
シーンエディタで非表示アクション
本記事ではSpriteKit Sceneファイルの編集画面(シーンエディタ)で設定できるHide ActionとUnHide Actionについて説明する。
Hide Actionはノードを非表示にするアクションで、Unhide Actionは非表示になっているノードを表示するアクションである。
現在非表示かどうかはノードのhiddenプロパティで確認でき(true:非表示、false:表示)、このアクションを呼び出すことでhiddenプロパティが変更される。
ちなみに、ノードを非表示にするだけなら、Hide Actionを使わなくてもhiddenプロパティの値を変更するだけでも表示、非表示を切り替えられる。
実際にノードに非表示アクションを追加してみよう。以降の手順を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる方はご利用下さい。⇒「テスト用プロジェクト」
事前準備では、背景と鳥のノードをSKSファイルのシーンに追加しておいた。
SpriteKit Sceneファイル(以下、SKSファイル)の作り方については次の記事を参照されたし。⇒「SpriteKit Sceneファイルの使い方」
Hide Action
下図赤枠のSKSファイルを選択してシーンエディタを開く。Animate横のボタン(黄緑枠)を押してタイムラインを表示する。水色枠のオブジェクトライブラリボタンを押して部品一覧を表示し、ドラッグ&ドロップで「Hide Action」を鳥ノードのタイムラインまで運ぶ(紫矢印)。
黄枠のアトリビュートインスペクタボタンを押して設定画面を表示し、Start Timeに「2」、Durationに「2」を入力する。
以下は実際のプレイ動画。シーン切り替えから2秒後に鳥が消えた。このように、フェードアウトのように徐々に薄くなって消えるのではなく、アクションが実行された瞬間に鳥は非表示になる。
アトリビュートインスペクタの設定項目を説明する。
Start Time
シーンが切り替わったタイミングから何秒後にアクションを実行するかを指定する。
Duration
アクションの所要時間を指定する。所要時間の長さに関わらず、アクションが実行された瞬間に非表示になる。なので、所要時間は他のアクションと組み合わせるときのタイミングの調整に用いることになる。
ちなみに、上記と同じ動きをソースコードで実装するにはTestScene.swiftを以下のコードに変更する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
// // TestScene.swift // import Foundation import SpriteKit class TestScene:SKScene { //現在シーン設定時の呼び出しメソッド override func didMoveToView(view: SKView) { //SKSファイルに配置した鳥ノードを取得する。 let bird = self.childNodeWithName("bird") as? SKSpriteNode //2秒待機のアクションを作成する。 let action1 = SKAction.waitForDuration(2.0) //非表示アクションを作成する。 let action2 = SKAction.hide() //アクションをまとめる。 let actionAll = SKAction.sequence([action1,action2]) //アクションを実行する。 bird?.runAction(actionAll) } } |
UnHidden Action
非表示のノードを表示するアクションなので、表示されているノードに対してこのアクションを実行しても何も変わらない。
そこで、UnHide Actionを実行する前に、Hide Actionを実行したり、hiddenプロパティをtrueに設定してノードを消しておく必要がある。
実際にやってみよう。先ほど追加したHidden Actionの設定値をStart Time「0」、Duration「1.0」に変更する。そのあとにUnHide Actionを追加し、Start Timeに「2」、Durationに「2」を入力する。
以下は実際のプレイ動画。鳥が現れた。。
上記と同じ動きをソースコードで実装するには、TestScene.swiftを以下のコードに変更する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// // TestScene.swift // import Foundation import SpriteKit class TestScene:SKScene { //現在シーン設定時の呼び出しメソッド override func didMoveToView(view: SKView) { //SKSファイルに配置した鳥ノードを取得する。 let bird = self.childNodeWithName("bird") as? SKSpriteNode //鳥ノードを非表示にする。 bird?.hidden = true //2秒待機のアクションを作成する。 let action1 = SKAction.waitForDuration(2.0) //表示アクションを作成する。 let action2 = SKAction.unhide() //アクションをまとめる。 let actionAll = SKAction.sequence([action1,action2]) //アクションを実行する。 bird?.runAction(actionAll) } } |
非表示にするときにalphaプロパティは変更されないので、透過されているノードのアルファ値を気にせずに表示、非表示の切り替えができるのが嬉しい。