Oct 17, 2016

[書評] 拖延心理學:為什麼我老是愛拖延?是與生俱來的壞習慣,還是身不由己?



作者: Jane B. Burka & Lenora M . Yuen

推薦指數 ★★★★★

有時候,只是想了解事情發生原因而不是尋求解法

在這邊不是要講這本書的內容,而是想聊它對我的影響。

Mar 31, 2016

[Unity] erinylin.lazylib - Cookie for PlayerPrefs



有鑑於 PlayerPrefs 測試與版本更新問題,將大家都愛用的 PreviewLabs.PlayerPrefs 打包起來,製作重點還是以懶人為主,基本上 PlayerPrefs 資料更新與數量並不可能會有強烈衝擊效能的狀況產生,所以為了方便開發,就弄了一個視覺化工具,方便除錯用。

雖然 PreviewLabs.PlayerPrefs 作者都宣告放棄他們的版權,不過為了尊重程式,僅僅加入了兩個公用函式,其他並無更改。

內有:
  1. Cookie Manager
  2. Cookie 用 DataObject 混合編輯 ScriptableObject
  3. 執行階段除錯視窗工具
  4. 當然還是有懶人常數檔案輸出
  5. 資料版本控制,方便更新版後儲存資料更新
功能其實很多,有興趣的請自行到 Github 下載並參考範例吧!

Mar 14, 2016

[Unity] erinylin.lazylib - fsm2.0

怕上篇文章越改越長,就直接開新的貼。

erinylin_fsm2.0.unitypackage

A finite-state machine (FSM) v2.0, use ScriptObject to preset states.

有限狀態機更新版。本人有強迫症,喜歡將工具不斷改寫。本版本主要是學習到 ScriptableObject and EditorGUI 時改寫的。

Mar 3, 2016

[Unity] erinylin.lazylib


絕大部分都是組件,會秉持懶人精神,朝使用便捷的方向製作。每個專案都會附上範例場景。不定時更新


erinylin_fsm.unitypackage


lastupdated: 03.03,2016

A finite-state machine (FSM), easy to use also can be set by Inspector window.

有限狀態機

Inspector
ScreenShot

 

Feb 19, 2016

PureMVC for Unity

幾個月前改用 Unity 開發遊戲,到目前的心得為:組件式開發真的是很便利,但是當組件數量多到一定程度時,結構上就有點可怕,常常在某 GameObject 上掛了組件後就忘了它的存在,雖然可以使用 Singleton design pattern 來製作主要的 Manager(本人對 Singleton 並不是很熱愛),程式還是會亂到一定程度,搜尋了一些 Unity with MVC 討論,一部分的人都對實作 MVC 不是很熱絡,也許是 Unity 特有的開發環境導致。

以前開發 Adobe Flex 專案最愛用的 MVC Framework 就是 PureMVC,即使後來有更方便的 MVC Framework 的也擋不住我對它的熱愛。Unity 是沒有所謂的全域 Root Scene,所有場景都是獨立,想要將 AS3 實作邏輯套用在 Unity 上將控制項都在 PureMVC 架構中實作是有點矯情多餘。如何保持 Unity 組件開發模式,導入 PureMVC 鬆綁主要邏輯,就是這次實驗的重點。

不清楚 PureMVC 的朋友們可以到這邊參觀一下:PureMVC 我也會

PureMVC C# Standard Framework on GitHub

ViewComponent 與 Mediator 整合是首要工作:

由於 Unity 沒有全域 Root Scene,如果將 new Mediator( viewComponent ) 寫在 PureMVC 架構下,即使透過 GameObject.Find 找那個對應的 GameObject 就轉了九彎十八拐,寫起來一點都不愉快,尤其考慮到場景的轉換,兩個場景中相關 Mediator 的註冊與移除處理,何況對 Unity 組件來說,能不能被打包動態載入是件重要的事。綜合以上問題點,反向思考,改由 GameObject 掛載中介組件,在 OnEnable 與 OnDisable 通知 Facade 去註冊與移除其 Mediator,一來簡化為了實作 Meditaor 掛載 ViewComponent 而對 static class GameObject 的依賴,二來也不會對 Unity 組件開發模式有太大的影響。

Nov 9, 2015

[CoronaSDK] TweenTrain, the transition helper class


上週新上架了一個 CoronaSDK transition API helper plugin,主要的目的是為了可以用 string 設定控制所有的動作巨集,方便動作資料預設。

一般來說,如果要使用 transition 達成物件跳躍後往右邊移動,一般語法如下:
transition.to( target, {y = target.y-100, transition=easing.outSine, time = 400} )
transition.to( target, {y = target.y+100, transition=easing.inSine, time = 300, delay=400} )
transition.to( target, {x = target.x+300, transition=easing.inSine, time = 600, delay=700} )


如果改用 tweentrain 就可以寫成:

tweentrain.set( target,
{ "transition:to", {y="-100", transition="outSine", time=400} },
{ "transition:to", {y="100", transition="inSine", time=300} },
{ "transition:to", {x="300", transition="inSine", time=600} }
)
tweentrain.start( target )


是不是就簡單很多了呢?

View the Document on Github

Get it from Corona Plugin Store now. =D

Jul 17, 2015

[CoronaSDK] 多國語系支援



CoronaSDK 中取得 Android 與 iOS 語系方法並不相同,繁體與簡體取得名稱也不一樣,為了簡化兩系統的繁體與簡體語系支持,所以特別打包了一支函式來控制多國語設定,之前一直忘了分享出來也剛好很久沒更新 Blog 了...=D

使用方法很簡單:
將語系字串放在 locale/ 並以 strings.i18n(預設)與 strings_[ISO_639-1].i18n
繁體共用命名:zh_hant
簡體共用命名:zh_hans

語系字串資料採用 JSON 格式:
locale/strings.i18n
{
"hello" : "Hello",
"welcome" : "Welcome"
}


locale/strings_zh_hant.i18n
{
"welcome" : "歡迎"
}


執行:Global function
L( str: String ) -> String
Usage:

local i18n = require( "i18n" )
-- set device language -> locale/strings_[device setting].i18n
i18n.setLocale()
-- 假使目前語系為 i18n.language = "zh_hant"
print( L("hello"), L("welcome"), L("no data"))
-- Hello 歡迎 no data

-- 動態更改支援語系到預設值
i18n.setLocale("")
print( L("hello"), L("welcome"), L("no data"))
-- Hello Welcome no data


備註:僅測試於 Android 與 iOS 系統,如其他裝置需要做修正的話,請自行 DIY。

Mar 6, 2015

[Lua] 簡易模擬 C# Delegate Type 行為

因為工作需求,準備開始學習 C#,這兩天研究一些公開的 Unity 原始碼發現 C# 有個 Delegate Type 很有意思,它可以利用 + 與 - 將需要搭配執行的 function 指派到委任者然後一起執行。如:

//C#, d1 and d2 are functions
allMethodsDelegate += d1;
allMethodsDelegate += d2;
allMethodsDelegate(); // d1(), d2()
allMethodsDelegate -= d2;
allMethodsDelegate(); // d1()

參考資料:使用委派 (C# 程式設計手冊)

Edit: 03, 08, 2015, 感謝 fb@shanyungyang 的提醒可以使用 Lua 的 metamethod 實作,為了達到屬性能往下傳,本來是打算採用 * / 但是又怕太混亂,最後就是由另外一個 meta2 來達到效果囉! ^^

Jan 8, 2015

[JSFL] Export MovieClip For TexturePacker

一般可分析 swf 的軟體都是針對 main timeline 做定位,所以直接從 Adobe Flash 的 Library 選單輸出的 MovieClip .swf 對其來說都是不合法的格式,如果一個 app 使用的動畫量並不多的話,將 MovieClip 轉拉到新文件重新輸出到不是太麻煩的一件事,但是...為了秉持懶人精神,當然是用 Adobe JavaScript API來製作 ,傑克真的太神奇了,想要的格式都可以透過這個修改輸出...說實話,現在一堆手持裝置用 App 的編輯軟體,再如何也沒有 Flash 好用啊! Flash 大回春!!!!!

首先完成的是 Export MovieClip For TexturePacker:
可直接將 MovieClip 輸出成 TexturePacker 可以分析的 swf 格式,其他的可分析 swf 的 spritesheet 包裝軟體也可以使用。共有兩種輸出模式,你可以直接將主場景影格1中所有的 MovieClip 實體輸出,或者選擇你要輸出的 MovieClip 實體即可。

Nov 3, 2014

[TexturePacker] Batch converting images to rgba4444

因為需要大量將圖片轉檔成較省空間的 rgba4444 格式,研究了一下 TexturePacker command line tool, 只能說,TexturePacker 真的太好用了啊!!!!

轉檔邏輯為將指定檔案夾下所有的 .png 原圖命名加後綴 @2x 順便輸出 0.5 scale 的小圖,所以不需要兩種輸出的可以將最後兩段倍數輸出設定刪除。
--variant 1:@2x \
--variant 0.5: