2011年11月26日 星期六

Unity 在遊戲中改變地形高度


如果我們製作的遊戲可以在遊戲進行中,因為某種撞擊或爆炸而使地面產生凹陷或突起等變形,是不是很酷!但是這該怎麼做呢?使用很多的地板模型去動態拼接嗎?還是利用程式去控制地板 Mesh 頂點的變化?這麼做會不會有拼接不完整或是形狀變得很奇怪的地方呢?如果對自己的電腦圖學演算及本身的程式與建模技術相當有自信的話,可以嘗試用自己的方式完成需求;但如果沒有這些功力,可以考慮使用 Unity 內建的 TerrainData class。

2011年9月16日 星期五

為 Unity 的不同版本及發佈平台編寫專用的程式碼


當製作跨平台遊戲時,雖然 Unity 已經相當方便了,但因為各平台間的效能及功能差異,我們常常需要附加專用的程式碼來做一些處理,儘管 Unity 的 API 已經有 Application.platform 來讓我們進行判斷,但有些 Runtime Classes 在不適用的平台 Bulid 時會回報錯誤,像是 iPhoneSettings 或是 iPhoneKeyboard 在 Bulid 成 PC 平台遊戲時就會直接報錯而無法 Bulid。

2011年6月18日 星期六

Unity 為 Android 手機的選單鍵及返回鍵加入功能

大部份的應用程式或遊戲,都會有呼叫選單或返回前畫面的功能鍵,通常當我們需要呼叫選單或返回時,都會在各個不同的使用者介面上尋找選單鍵或返回鍵,而 Android 手機很貼心的在手機面板上就已製作了這兩個按鈕,如此貼心的設計,導致 Android 的使用者習慣利用這兩個按鍵來呼叫選單或返回,所以如果開發 Android 遊戲而不為這兩個按鍵加入應有的功能,可能很容易就被 Android 使用者扣分。

2011年6月5日 星期日

Unity 在 iPhone 上如何偵測到系統的語言設定

使用 Unity 設計遊戲有個優勢就是跨平台,但除了跨平台之外,遊戲能夠同時支援多種語言就更完美了,在這方面,Unity 也幫我們考慮到了,所以要判斷使用者系統使用的語言是相當容易的,可惜的事,在 iPhone 的系統上卻不是這麼回事;所以在遊戲中只能多個語言設定的功能讓玩家自己設定要使用哪種語言,這樣也是支援多語言環境,但似乎有點美中不足的感覺,如果玩家進入遊戲就能自動切換適當的語言環境,不是更便利嗎!! 那麼在 iPhone 上應該如何辦到呢?

2011年5月22日 星期日

Unity 隱藏3D模型及 GetComponentsInChildren 的使用

有時遊戲設計的需求,在場景中的3D模型物件未必都是一開始就一直是顯示的狀態,有可能會因為某些事件的發生而必須將物件隱藏,或因為某些事件的發生必須使該物件再次顯示出來,通常在大部份的狀況,我們可能會先製作一個 Prefabs ,在需要該物件時利用 Instantiate() 建立一個實例物件,使物件在場景中運作,在不需要該物件時利用 Destroy() 將此物件銷毀,可是如果我們的需求是必須持續使用該物件,物件本身帶有某些資料值會持續使用到,那麼就不能隨意將其銷毀,但此時需有一段時間不能使該物件出現在畫面上,那麼我們應該怎麼做呢?

2011年5月14日 星期六

Unity 的 JaveScript 利用 enum 定義常數

比較有點經驗的程式設計人員都知道,寫作時應該要多避免程式碼中有不可思議的值,所以通常我們會利用變數或常數來宣告一些值,需要變動的值,理所當然的會定義變數來代替,所以不容易使程式碼中出現不可思議的值,但很多時候只是為了判斷用的值,我們如果常常使用 if(status == 7) 這樣的方式寫作,程式結構越來越大或是將來回頭來維護時,可能很難想像到這個數值 7 究竟是代表什麼意義,所以此部份如果事先定義常數的話,將可以更方便於辨識及後續維護,例如 if(status == PLAYING),可以更清楚明白這個判斷的目的為何。

2011年4月30日 星期六

Unity 卸載未使用的資源

通常在變換場景後,上個場景中除了使用 DontDestroyOnLoad() 保留的物件,將會被釋放掉,但如果在沒有變換場景的情形下,想把未使用的資源卸載掉,該如何做呢?

Unity 自動調整 GUI 縮放比例及位置

面對各平台的畫面解析度大小不同,常常會有困擾於 UI 位置及大小要做好幾套來應對,或是利用程式去多方演算以達到各種不同需求都能適中,以免辛苦調整好的 UI 在面臨不同解析度下,整個位置及大小都偏移掉了。