結論:

對於注重效能的Code,使用String Builder
對於簡單或是注重可讀性的部分,使用plus concatenation
對比較不注重效能,而且要合併大量字串的,用string.Format

---

資料來源: http://www.slideshare.net/sindharta/c-string-concatenations-in-unity

這個投影片裡比較了Plus concatenationstring.FormatStringBuilder三種做法。

在速度來講,Plus concatenation在一開始的速度很快,但字元數越多相對的變越慢,
到了30字元以上的情況時反而是最慢的。
StringBuilder幾乎都是最快的。










而記憶體方面,Plus concatenation一開始消耗的記憶體最少,但也是隨著字元變多也快速的提升消耗量。
StringBuilder消耗的記憶體平均也是最低的。










結論:
對於注重效能的Code,使用String Builder
對於簡單或是注重可讀性的部分,使用Plus concatenation
對比較不注重效能,而且要合併大量字串的,用string.Format



















  這個Project是遊戲設計的期末報告,以小組為單位完成一個使用Kinect做為控制裝置的遊戲。我們的小組由外籍生、設計系學生和我組成。我主要負責的是遊戲的架構規劃、整個遊戲內容的coding (除了Kinect IO部分),以及和組員溝通決定開發的走向。

        遊戲的背景是玩家扮演一個強大的巫師,面對著把村莊摧毀掉的怪獸。玩家必須要用Kinect做出不同的姿勢施展法術,一邊抵擋怪獸的攻擊一邊反擊,並且在空檔的時候修復損毀的村莊。當遊戲進行到一個階段之後,玩家就會被傳送到怪獸面前展開近距離的戰鬥。


玩家操控的魔法師,和入侵城鎮的怪獸。

因為我們這組在最後的兩個星期才決定更改成這個主題,所以時程非常的趕。要怎麼規劃在兩個星期內完成這個遊戲,反而是這個專案最困難的地方。由於只有一名美術人員,我們在規劃的時候也把很多美術的工作分到程式的部分,讓美術有時間去設計出適合遊戲的怪獸模組和動作,並且做出很有氣勢的開場及轉場影片。在製作的時候我們也盡量的把前兩年學到的Ogre技巧用進去,做出了螢幕晃動、爆炸的光影特效等在細節上提升玩家刺激度的元素,在有限的時間裡面產生出最好的效果。


使用法術修復被破壞的城鎮

  在這個遊戲中使用了Kinect當作控制裝置,原本的設計構想是使用語音和動作來觸發法術效果,但在實做之後發現語音的延遲太大不適合快節奏的遊戲,但只靠動作又容易產生誤判的狀況,這是之後要想辦法解決的問題。


第二階段的近距離戰鬥






  在這個期末專題中,我們使用Unity來完成Android手機上的一個App。在Ur Android裡面我們做出了一個虛擬的Android寵物,會隨著使用者的生活跟著慢慢的成長。其中一個特點是我們在裡面加入了AR的功能,使用者可以藉由AR卡片來跟寵物互動、玩遊戲,並且可以在校園的不同角落尋找AR pattern來增加寵物可用的衣服或道具。在拍照的時候,能夠在螢幕上叫出寵物,擺出想要的姿勢之後和主人一起拍照。


用AR功能和Android寵物互動


  在這個專題裡,第一次使用了Unity來開發遊戲,也是第一次開發手機上的程式。不像開發電腦程式時有很高的硬體效能,手機程式需要對效能斤斤計較,在提供理想的內容同時也要保持操作的順暢度,這是在開發的時候遇到的最大困難。
  因為這個專題是12人的大團隊組成的,在分工方面也出現很多問題,尤其是最後完成了自己的部分,要把所有人的程式整合起來時,才發現有些地方因為分工時的規定不足,導致需要額外花很多時間重新設定傳遞參數之類的資訊。因此我想之後的專題分工時會特別注意這點,在分工時就預先設定好主要的function和參數,以免整合時產生額外的costbug





  這個專題的目標是利用物理引擎在Ogre裡面產生一連串相連的事件。因為所有事件是頭尾相連的,所以在一開始就需要設計好所有的流程。我最後決定的流程是由草原轉到海上,接著另一邊的沙漠區,最後用熱汽球帶到天上結束。並且整個流程的事件觸發都是隨著背景音樂的改變而出現,讓觀賞的時候可以對場景的轉換更有感覺。

  由於這個專案中需要用到很多的美術素材和音效,所以我從魔獸世界中擷取出了需要的模組和音效等檔案,再自己組成想要的結果。在擷取的過程中也順便觀察了在遊戲公司裡歸類檔案的格式、命名方式等等,用這些規則來改進原本的做法來提高工作的效率。
  除了場景的編排以外,另一個花時間的部分是對整個物理引擎的控制。雖然之前有使用過Bullet,但是在Chain reaction的要求下需要很高的精細程度,所以在加入物理引擎之後還花了很多時間在微調參數,讓整個流程的運行更像現實世界的狀況。
  有之前的經驗,這次也特別注意在使用BulletCaelumHydrax這些耗資源的Library時,仍然可以保持足夠的fps




新增說明文字






  這個專題分成兩部分,在第一部分裡面我們實作Spline,然後在第二部份中用Spline算出軌道,然後使用Ogre3D作出雲霄飛車。
  在這個專題裡我主要負責場景。首先用Ogitor編輯器來製作整個場景,包括地形、材質、靜態物件位置等。接下來設定軌道的控制點,將Spline算出來的結果繪製出來,並且加上鐵軌的模組。場景完成後使用DotSceneLoader,在執行程式的時候先產生場景。最後加上動態的特效、Particle systemHydrax水體效果及Caelum的天空效果。



在這個專題裡因為負責的是場景的部分,從場景規劃開始我就是以製作遊戲的想法進行,可惜最後時間不足沒辦法將原本構想的遊戲內容做出來,只來得及完成一整圈的軌道以及場景。製作的過程中我加入了大量的特效,其中水體和天空的特效花了最多時間研究,得到的結果也很值得。但是由於沒有考量到整體效能的問題,最後Demo的時候順暢度沒有自己在家裡的狀況好,這是在之後做類似的專題需要想辦法解決的。





這個遊戲是學校的產學合作專案,特點是使用雙點觸控的觸控螢幕,做出爵士鼓的節奏音樂遊戲。
遊戲內容分為音樂教室舞台表演套譜計分三個部分,
音樂教室:讓玩家自由打擊,並且有可以錄音、播放、編輯的功能。
舞台表演:模擬玩家身處Pub或海灘表演場合,台下觀眾會隨著玩家的表演而有動作反應。
套譜計分:玩家配合音樂及畫面上的鼓譜打擊,在演奏後依照玩家的表現計分並排行。

  在這次專案中了解到如何和廠商溝通協調,還有與美工人員的進度互相配合。在開發遊戲的過程中,由於是第一次和廠商接觸,剛開始往往需要好幾次的修改才能達到雙方都可以接受的要求及成果。因此在程式的製作上就需要更有計劃的進行,盡量減少在需求變更的時候需要修改的程式碼。
  另外這也是第一次在遊戲的輸入端用觸控螢幕來代替傳統的滑鼠鍵盤。在寫程式的過程中,觸控螢幕和Glut的不相容,以及觸控偵測的方式等等都花了很多時間研究解決方法。





使用的技術
輸入:使用觸控螢幕傳送的座標訊號。
繪圖:由於考量到在不同平台上的相容性,所以使用OpenGL
音效:使用外部的函式庫 - Irrklang






  我們小組選擇這個主題的靈感來源是網路上的一部動畫,描述一隻不會飛的奇異鳥在懸崖的岩壁上釘上一棵棵的樹,最後往下跳讓自己體驗飛行的感覺。我們的目標是重現往下跳的片段,並且將它實做成遊戲。
  在這個小組中我主要負責處理影像的部分,例如影子、雲霧、場景配置,以及各種遊戲中的特效。在製作出基本遊戲架構的同時,我們還希望成果畫面盡量接近原影片,讓有看過原本影片的使用者可以更深入地融入遊戲內容。

  在這次的製作中,因為是第一次接觸圖學的領域,在學習製作遊戲的同時也了解到很多圖學相關的知識。而協調組員的工作進度,把各自負責的AI、場景、模型等等整合起來也是挑戰之一。
  我們最後成功的在期末投票得到了第一名,不過我認為在遊戲性和整個程式的完整性都還不足,很多有趣的構想也因為時間限制沒有實做出來,是在之後的專題需要加強的部分。

使用的技術
遊戲本身使用的繪圖引擎是OGRE (Object-oriented Graphic Rendering Engine)
在影像方面使用了:  Shadow volume: 樹木及Kiwi本身的陰影效果。
                                      Fog: 整個場景的雲霧效果。
                                      Sky Plane: 遠距離的天空背景。
                                      Radial Blur Shader: 使用放射狀模糊模擬出高速飛行的速度感。
在遊戲系統使用了:  Bounding Box: 判斷玩家與障礙物的碰撞。
                                      AI (A*): 遊戲中障礙物使用的追蹤路徑AI

Previous Post較舊的文章 首頁