文章

[教學]一起來開發遊戲吧 - 前言

圖片
[前言] 「你都可以做到。。。一起來開發遊戲吧」-這個系列名想了幾天,一直很在意大家在開發遊戲上最大的牆壁是什麼。
這兩年間在不同的開發群組中出沒,見到有不少高手師兄師姊,有更多自以為是高手的人們,也有佔最大量的新手們。 新手們未必是初學 Unity,有一部份是在以前有學習過 Unity,但並沒有參與任何創作一段時間的人;本人最好奇的是新手們問最多的問題是什麼,問最少的又是什麼,而答案出乎意料之外: 被問最多的項目:程序、美術方面被問最少的項目:Unity 的基本功能 最多人問的項目並不意外,在意的反而是最少人問的項目。
在觀察範圍內,由於沒有了解 Unity 的基本,反而讓編程出現更多問題的案例真的不少,例如物理編程就是一個好例子。 對程序的編寫和 Unity 系統運作的不理解,是讓一部份新手放棄的最大元兇。 美術是最多新團隊忽略或無助的最大問題。
自己在創作上會分享一些東西,熱門和冷門的項目都會分享,但這些對新手來說並沒有真正的幫忙;總不能叫一個程序都沒法寫好、Unity 的運作也不理解的新手去使用加密系統吧。 那到底分享什麼才會有最大的效用呢?-討厭浪費的自己開始去想這個問題。
本人不會知道每個新手的背景,他們已經學了什麼,他們知道什麼,他們誤解了什麼,那要如何去做一個最有價值的教學?-答案原來在自己身上。
二十四年前自己並不是優等理科生,只是一個高中重讀兩次也沒法升學的十八歲商科生,這樣的我到底是如何學習程序和美術?-相信這個答案可以幫到最多的人吧。
日本很多入門書籍都會以「サルでも分かる○○入門」作為書名,意思是「即使是猴子也可以理解的○○入門」,在華人的文化中動物都會有貶義,所以沒有用在題目中,但回看當年的自己時就想跟看到這裡的閣下說一句,「即使是這樣的我也可以做到,你也一樣可以的!」。
本次的教學內容,會以對 Unity 有一點認識為大前題,以最有效的「製作簡單的遊戲」作範例,從如何整理遊戲創作的想法、如何運用 Unity 遊戲引擎的功能、到程序編寫的基本技巧,不以花巧賣弄,而以最基本去滿足最複雜為目標,從淺入深一一解說。
本教學並不會教「美術」方面的東西,因為編程的邏輯思維跟美術的思考可以說是完全相反,即是兩者關係比永遠不會相䃥的兩條平衡線還要差!
如果你真的打算學習美術和程序兩方面的話,我只會建議不要同時學。 本人雖然在這兩方面都有平均以上的成積…

遊戲開發日誌 #07

圖片
看到題圖,就知道這次想說的是加密。

今次會比較深入地去說明一下加密到底在做什麼。
也會把本人最新的加密方法作較詳細的說明。

關於遊戲資料為何需要加密,可以先看<遊戲開發日誌 #04> 。

遊戲開發日誌 #06

圖片
這次會淺談程序的簡化、系統的整合性,同時分享優化後的自訂物理的運作和程式碼。

如果還沒有看過上一篇的自訂物理的話,可以先去看看,當中說明了為什麼要使用自訂訂物理。

遊戲開發日誌 #05

遊戲開發日誌 #05

圖片
這個世界充滿了物理法則,遊戲世界亦一樣。 我們習慣了現實世界的物理環境和慣性,也會把同樣的感知力放進遊戲世界。 若果遊戲世界的物理環境和慣性跟現實世界有出入,就會產生違和感。
不過現實卻是。。。
「即使遊戲引擎使用現實世界的物理法則去運算和表現物理效果,人還是會產生違和感。」
到底是為什麼呢?

遊戲開發日誌 #04

圖片
在經過各路取經後,遊戲由純解迷更改為輕動作的故事類解迷 ARPG。
現在正踏入戰鬥系統的設計和編程。

說到戰鬥系統,就會出現不少參數,要從遊戲修改程式保護這些參數是一個重要的課題。

這次就分享小弟的加密方法。

遊戲開發日誌 #03

圖片
開發進度還算理想,基本都困在自己最弱、資歷最淺的3D模型上。。。

程序上由於對 C# 的特性和 Unity 的環境雙方的了解還不足夠,花了不時間去研究和嘗試。。。

為了對自己的幫助更深,所以也開始解答一些問題或提供解決方案之類的討論,獲益不少。

這篇除了分享一下開發的進度,也分享一下這幾天一個比較有趣的討論。

遊戲開發日誌 #02

圖片
在上一編的 Localization 內容,有人私訊問題,關於 dataSystem.text.en 取得系統相關的英語文字的事項,如果有十幾種語言,那不同類型文字的程序都要去編寫嗎?

像以下這樣:
string GetSystemText(int textID) {         DataSystem ds = Array.Find(dataSystems, s => s.textID == textID);         switch (localizationIndex) {             case 1:                 return ds.text.en;             case 2:                 return ds.text.jp;             case 3:                 return ds.text.cht;             case 4:                 return ds.text.chs;             default:                 return ds.text.en;         } string GetItemText(int textID) {   .   .   .如果是上面這樣做的話,的確要為每個種類的取得文字 function 去設定重覆的步驟。其實只要做一次就足夠,不用這大廢周張。