Xcode 5でSpriteKitのSKTextureAtlasを使用する


SwiftUI ベースのプロジェクトで SpriteKit の SKTextureAtlas を使用したかったのですが、プロジェクトに ".atlas" サフィックスのフォルダを作成し、コンパイル時にアトラスを生成させる方法ではできなかったので、調査しました。

結論から述べますと、アセットカタログ (Assets.xcassets) に作成したフォルダをアトラスとして使用できます。

具体例を示します。次の通りにアセットカタログに "cat" フォルダを作成し、猫が歩くアニメーションのフレーム画像 (cat-walk.0 〜 3) を保存します。

Assets.xcassets
├─AccentColor
├─AppIcon
└─cat
  ├─cat_walk_0
  ├─cat_walk_1
  └─cat_walk_2

ソースコードで、SKTextureAtlasnamed 引数に作成した "cat" フォルダの名前を指定し、インスタンスを生成します。インスタンスの textureNamed メソッドを使用すると、同フォルダに保存したフレーム画像をアトラス内の名前付きテクスチャとして参照できます。

import SpriteKit

let atlas = SKTextureAtlas(named: "cat")
let textures = [
    atlas.textureNamed("cat_walk_0"),
    atlas.textureNamed("cat_walk_1"),
    atlas.textureNamed("cat_walk_2"),
]

アトラスの名前はフォルダの名前ですが、半角英数字のみ (?) で指定しなければいけないようです。フォルダの名前に ". (ドット)" を含む場合は、一番最初の "." より手前の文字までをアトラスの名前として認識しました。又、フォルダの名前に "- (ハイフン)" を含む場合は、アプリケーションが異常終了しました。