2014/9/4

[筆記]從Flash到LWF再到Unity


簡單記錄一下如何透過LWF將Flash的動畫輸出到Unity裏運用。


§ 安 裝 §


.在Unity開啟一個新專案。

.到LWF官網 http://gree.github.io/lwf/ 下載最新的版本。

.解壓縮後,在解壓目錄/csharp/unity/dist/ 下可以找到一個lwf.unitpackage,執行它並安裝到剛剛開的unity專案裏。

[註]最新版的LWF需要Unity4.5以上環境

以上就做完Unity這邊初步的環境建置。接著是準備Flash的轉檔環境。


LWF官網本身有提供JSFL方式的轉檔script,可在剛剛的壓縮裏找到。不過網路上有另一個更方便的工具LWFS。


.到 https://github.com/gree/lwfs/releases下載最新版的LWFS,有分OSX及Wins版,要注意看一下。

.解開後會得到一個LWFS的目錄,裏面有start.app及stop.app,是兩支python寫的程式。執行start.app,正常的話會自動啟動瀏覽器,並出現類似這樣的畫面:




另外還會自動在桌面上產生兩個資料夾:LWFS_work及LWFS_work_output


[註]Mac OSX 10.9以上的話,要先針對LWFS資料夾的執行權限做設定,依照裏面README.txt寫的步驟去做就可以了。
[註2]LWFS放置的路徑中,最好不要有中文、空格之類字元出現,否則start.app可能會無法執行。



§ 轉 檔 §


.把swf檔案放在桌面上的LWFS_work資料夾內,幾秒內就會自動轉檔,產生的檔案會在LWFS_owrk_output裏。

.swf在製作上有一些注意事項,請參照官網提供的Flash Production Guideline(pdf)

.另外如果要用程式控制場景上的MovieClip,則必需設定好instance name。

.若要動態從Library裏叫出做好的元件,則需要設定好Linkage id。

[註]SWF在製作時需注意一點。在Unity中使用LWFObject呼叫LWF.Movie出來時,至少一定會有一個Movie會強制出現在depth最底層,即使去設定他的sortingLayer也無法改變,而除了這個Movie外,其他Movie則正常。這裏想到簡單的解決方式是在SWF的root stage上放一個空白的movie clip,到Unity裏使用時,該空白mc就會出現在depth最底層,而之後出現的Movie就能正常表現



§ 匯 入 §


.swf成功轉檔的話,會在LWFS_work_output/unity/找到與swf同名的資料夾,例如test.swf會輸出一個test.swf的資料夾,裏面應該會有素材圖檔及一個test.bytes的文字檔。

.將整個test.swf資料夾複制到Unity專案底下的Assets/Resource s/裏。

  void Start () {
  gameObject.AddComponent<LWFObject>();
  LWFObject _lwfObj = gameObject.GetComponent<LWFObject>();
  _lwfObj.Load("test.swf/test","test.swf/");//.bytes文字檔的路徑及存放素材圖檔的路徑
  LWF.Movie _movie = _lwfObj.lwf.rootMovie.AttachMovie("linkage_id","instance_id");
 }


.如果是放在stage上的動畫,在_lwfObj.Load這行執行後就會出現了。

.lwf.rootMovie.AttachMovie這段則是從Library中叫出動畫。

.更多程式控制的方式要多參閱官網的文件,另外LWF似乎以日本使用者居多,所以也可以找到一些日文blog有使用心得。




§ 補 充 §


(update 2015/12/23)
有些去背的png素材,在實際播時,原本透明的地方出現莫明的雜線,在texture設定裏把Alpha Is Transparency給uncheck掉可解

(update 2014/10/11)
若要從swf內去呼叫unity的C#,可以在Flash內用fscaommand:
  fscommand("event", "sendMessage");

而在C#這邊:
  //在LWFObject裏
  SetEventHandler("sendMessage", (movie, button) => {
            // doSomeThing
        });

這邊要注意一點是,LWF只支援AS2,雖然以AS3輸出的動畫它仍可正常播放,但這邊用到fscommand則必需要是AS2才能正常執行,所以務必用Flash CS6或以下的版本來製作SWF。

(update 2014/9/7)
後來在官網看到目前scale上似乎是有問題的,作者建議素材的texture設定如下:
Texture Type: Advanced
Non Power of 2: None
Generate Mip Map: Unchecked
Wrap Mode: Clamp
Filter Mode: Point (Bilinear is okay if the scale is one)




§ 參 考 §


LWF official page

LWF Demo page

Unity API Reference

LWF wiki For Flash (JP only)

LWFS

Notes on Lightweight SWF (LWF) framework for Unity(裏面的LWFAnimator已無法在最新版的LWF使用,不過一些語法可以參考)