鴨子開發日記

一個遊戲開發者的隨筆 – ABOUT A GAME DEVELOPER

0%

今天來聊聊一個很數學、很物理的東西:彈簧。

做遊戲難免會遇到的優化問題,就是玩家操控腳色的流暢性,一個腳色在玩家的操控下走走停停、跑跑跳跳,光是如何讓物件的 position 可以流暢且自然,就是個大課題。或者在外部操控器的訊號跟物件的移動之間的協調,如何讓物件的移動有著 “起承轉合” 般的真實動感,在 VR 遊戲上會大幅影響玩家的舒適度,以及對遊戲的接受度。

有個方式可以處理上述的議題,就是套用 “數值彈簧” (numeric springing) 在物體的移動上,產生起步的加速、停留的減速,減少物體在移動時讓然覺得卡頓或者突兀的感覺。“數值彈簧” 是個我一直想要理解與實作的東西,如今終於動工了,這篇文章分享的是我的作法,以及 數值彈簧 的廣泛用途。

閱讀全文 »

這幾天我需要實作一個功能:在遊戲中用準星瞄準、射擊來觸發 uGUI 元件。

很直覺的我在 uGUI 元件上加上 Collider,並用 Raycast 來觸發;不過反覆調整之後還是無法順利觸發 uGUI 元件,直到朋友給了我不同的思考方向,才成功完成實作。這個新的實作方向,同樣是利用 Raycast,不過我們不用來觸發 Collider,而是仿照點擊觸發的流程,觸發 uGUI 的 EventHandler。

完成了這個實作之後,同理類推,便能用各式各樣自訂的方式來觸發 uGUI,讓 uGUI 不一定只適用在點擊觸發的操作介面上,可以發展各式各樣的創意。

閱讀全文 »

這篇文章的內容是關於 Unity 的優化,針對的優化對象是 uGUI 在射線 (Raycast)。

由於 Raycast 在 Unity 當中算是相當消耗運算資源的物件,但是又被大量應用於點擊偵測之中。在 Unity 5.2 版之後,uGUI 多了一個選項 (raycastTarget) 可以選擇關閉 UI 物件上作為可被 Raycast 掃描之物件的屬性,以降低 Raycast 的負擔。所以後期優化的動作便多了一個:將不會被點擊的 uGUI 上的 raycastTarget 屬性取消掉。

相關資訊我是在 Unity3D研究院之UGUI一個優化效率小技巧 這片文章中得知的,文章中也提出了一個建議:與其開發後期才一個個檢查 uGUI 並取消 raycastTarget,不如一開始就預設關閉它。同時該文章作者針對這想法起了一個自訂 Editor 的頭,我在其中加上了自己的想法補全並改善這個自訂 Editor,形成這篇文章。

閱讀全文 »

來聊聊四元數 (Quaternion),前陣子跟它搏鬥了一段時間,然後 … 恩 … 現在比較沒那麼困惑了。

unityrotation

Unity 中常見的旋轉設定便是物件的 Rotation 屬性 (上圖),也就是以三個方向為軸的旋轉角。平時在編輯場景時操控旋轉相當直覺,可是當需要從 Script 中用程式碼去控制物件的旋轉時,這時候會發現原來 Rotation 屬性是由 Quaternion 這個類別來處理,身邊的許多人(包括我)雖然懂得利用一些 Unity Script 去旋轉物件,可是總是一知半解,對於複雜一點的旋轉操作沒有多少把握。於是努力去研究跟學習後,有了這篇初步的心得出現,拋磚引玉。

閱讀全文 »

隨著參與大型專案的開發次數越來越多,對維護與穩定的要求越來越高,我不斷地感受到,改變一下程式的設計方式或許不影響程式功能,但是在未來修改或擴增功能時卻會變得更加容易。甚至好的設計之下,可以將部分的程式碼作點修改,就能適用於不同的專案,大大地節約開發所需要耗費的時間跟心力。

針對於好的設計,最近藉由一本書在學習設計模式,書中有一小節簡短帶過了一些關於進行物件導向開發時,可以讓開發或者維護更容易的一些設計原則。

雖然只是短短一小節,但是就讓我體會到站在巨人肩膀上的感覺。過去為了讓自己的程式有著上述容易維護與可重複使用的優點,往往會花上許多時間去反覆思考,但原來早就有前人歸納出幾個原則可以作為設計的大方向了,我只是再次考慮了相同的問題而已。

這些原則不能說是絕對的,但是如果在這些原則所指名的方向上思考,可以確實的讓人少走上許多冤枉路。上網特別研究了在書中提到的幾項設計原則之後,留下了此篇紀錄。(六項原則:SRP、OCP、LSP、ISP、DIP、LKP)

閱讀全文 »

2016/3/9~15,來自 Google DeepMind 的人工智慧 AlphaGo,在世界的注目下,與韓國職業九段棋士李世乭進行了五局圍棋對弈,取得了 4:1 的勝利。

這樣的比賽結果,不同的人在不同的角度下,產生了差異相當大的迴響。對我也引發了相當程度的震撼,深刻且迴盪的衝擊感,促使著我花了不少時間去瞭解與消化,寫下這篇文章。

閱讀全文 »