這系列著重的在於Unity裡的視覺化編輯工具,不論其產出物是否為程式碼,又或是可被執行時餵入的資料,大致上來說,都是以製作的角度考量,用工具進行輔助後,可以輕易、快速或更有效率的協助完成某一功能。對於已經知道要怎麼做的人來說,這些工具的存在有其價值。對於完全沒有概念要做什麼的人來說,這些工具也很難提供有效的幫助。
Unity官方雖然釋出了一系列的教學專案,依照不同的主題進行劃分,但多數專案建構在學習者對Unity和程式設計有一定的認知,只是對於某特定主題不熟而不知如何切入,所以它提供了FPS的專案、Adventure專案、跑酷遊戲、2D RPG專案等,一方面教授各型別的遊戲概念、另一方面則是會加入當時主推的技術、像是Shader Graph、Post Processing Stack、Addressable等。
等對於想要展開遊戲開發的人來說,這些專案的複雜度遠超過可以理解的範圍,根本很難用這些被定義成教學用專案進行前期的學習。這時候最好的方式還是進行外部教學網的學習,成效都會比較顯著。
撇開Udemy、SkillShare等傳統網路教學外,其實在網路上有著不少的互動式學習管道。LeetCode在這次鐵人賽中,有不少鐵人有談及到,這裡就不做贅述。而LeetCode偏向通用性的程式設計概念,若是想要直接切入和遊戲開發相關的程式設計,可以考慮CodeCombat和CodingGame,這二個網站對於學習遊戲開發有著一定的幫助。
網站本身就做的很有遊戲感,不過好不好是見人見智。從來沒有用過的情況下,就跟著它的關卡一步步的往前走。
裝了技能才可以使用函式很有趣
左邊的圖示是目標,右邊則利用函式達成
再過幾關後可以裝備劍進行攻擊,也換了不同的英雄(有不同的能力)
碰到主動攻擊的敵人連移動都不用,直接攻擊即可
終於學會了迴圈
就算程式碼寫對,也會因為沒有消費導致敵人太強過不了
這就是Code Combat的教學引導方式,有興趣者可自行嘗試。
前二年有加入玩了一下,這個網站提供的較多的進階挑戰,有依據不同的困難度來做區分,且可用的程式語言很多元,對於有程式基礎想要學習不同程式語言的開發者,這裡是很不錯的地方。
也是跟著教學走了一段,還在菜鳥等級就沒有在往上升級了
這些用遊戲包裝的挑戰,有著不同的練習主題,像是Binary Search,Recursion等。這次就隨意找了一個標為中等難度的練習來試試看。
這挑戰的解題概念是用Pair的方式將編號的石頭和數量記錄下來,而後進行排序的動作。接下來就從小到大的進行合併動作,由於一次只處理一個編號,合併後只會產生二個,也就是原編號一個再加上此編號加1的另一個。再將這二個編合併於原先的陣列中。但合併的時候若加1的編號原陣列沒有,則放入後還要再進行一次排序,反覆進行直到判定不能往下為止。
if (hasNextTier)
{
var nextTierIndex = sortedPairs.FindIndex(sp => sp.Key == nextTier);
sortedPairs[nextTierIndex] = new KeyValuePair<int, int>(nextTier, sortedPairs[nextTierIndex].Value + combinedCount);
}
else
{
sortedPairs.Add(new KeyValuePair<int, int>(nextTier, combinedCount));
sortedPairs = sortedPairs.OrderBy(sp => sp.Key).ToList();
}
全部的程式碼放入到Gist中,可自行參考了解。
不確定這樣的解法是否有效率,但全數通過了它的測試,拿取到100%完成。
Code Combat和遊戲的接合性較高,但也比較商業化,在學習的同時,也是要花錢才能夠一直往下探索。而Coding Game則偏向演算法的練習,只是看起來用了遊戲的一層概念包起來,骨子裡其實就是輪入、輪出的正確性。
Code Combat比較偏向用視覺化的方式引導程式設計的學習,對於初學者來說是一條值得嘗試的方式。而Coding Game則是開發之餘想要進一步了解不同語言如何完成同樣一個功能最佳的練習場所。
今天利用了大多數Unity視覺化編輯工具介紹到了一個段落的空檔,介紹了讓各位開發者可以玩一玩LeetCode之外的程式練習場所。其實相關的網站也還不少,有興趣的開發者也可以一起交流。