all green

プログラム、アプリ作成、Web等備忘録が中心です

UnityのLWFでスプライトシートを使用する

先日試したUnityのLWFでスプライトシートを使用できるみたいなので試してみました。
Wikiには項目があってちゃんと読めよという感じでした・・・)


作成手順

事前にLWFが使用可能なプロジェクトを作成しておく

↓先日の記事
UnityでFlashで作成したアニメーションを使用する - all green

1.スプライトシートを生成する

使用したもの

Adobe Flash Professional CC
Version 14.0.0.110

ライブラリ上で使用している画像をすべて選択
f:id:uwanosora22:20140827191721j:plain
→右クリック→[スプライトシートを生成...]
※以下の場合は変換がうまくいきません
・ライブラリ上の名前に拡張子がついていない場合
・選択した画像がライブラリ直下にない場合

設定はこんな感じ
f:id:uwanosora22:20140827192155j:plain

作成されたJSONファイルのBOMを削除する。

例:サクラエディタの場合
[ファイル]→[名前を付けて保存]→BOMのチェックを外して保存

2.パブリッシュ

FlashCC上で[コマンド]→[Publish for LWF]

パブリッシュされると画像フォルダが追加されます

f:id:uwanosora22:20140827192827j:plain

3.LWFに変換

LWFS_workフォルダにeffect_sampleフォルダをそのまま入れます
(めんどくさいので手順2のファイル全て入れてしまいました)

f:id:uwanosora22:20140827193406j:plain

LWFの変換バッチを実行するとファイルが生成されます。


あとはUnity側で使用するだけなのですが、そのまま実行すると
以下のエラーが発生

InvalidCastException: Cannot cast from source type to destination type.

lwf_unity_resourcecache.csの中でエラーが起きているけど
ただの型変換ができていないだけ。

ちょっと調べてみたけどUnityのバグで
フォルダ内に、拡張子が違っても、同じ名前であれば、Resources.Load()関数で認識ができなくて生じるらしい。

LWFのソース「lwf_unity_resourcecache.cs」の144行目あたりを以下のように修正して対応しました。

変更前

Texture2D texture = (Texture2D)Resources.Load(filename);

変更後

Texture2D texture = (Texture2D)Resources.Load(filename, typeof(Texture2D));

ちなみにUnityのバージョンは4.5.3でした。