Posts Tagged ‘iPhone’

一個人獨立開發App七年回顧

Wednesday, December 20th, 2017

算一算,從離職後開始開發App到現在,也已經快七年了(我大概是2010年12月開始走上這條路的)… 距離前一篇文,隔了快五年了! 我的老天… 從一開始滿腔熱血,到失意喪志,然後再絕地重生(是不是應該拍成電影? XD)。這中間大概開發了八款App。越到後來,App的開發時間一款比一款久。

上一款開發的遊戲App – Galaxy Lord (賣的很差,已經下架了)

大概花了我超過一年半的時間開發。是我之前所有App裡開發最久的,結果得到的銷售成績,卻是所有App裡最慘的。之所以會花這麼多時間是因為… 約四年前,我搬離了台北,來到台南,做了一份兼職也是開發App & Web的工作(一開始是全職,但經過了幾個月後,我實在難以忘懷獨立開發遊戲的滋味…)。那時候在開發上已經遇到了瓶頸,不是技術上的瓶頸,而是心理上的瓶頸。覺得好像不管再怎麼努力,似乎都無法獲得到好成績,付出的心力與獲得的報酬完全不成正比。因此心裡實在很難過很灰心,想說還是先找一份工作做,下班時間再開發自己的App。這樣至少經濟上比較沒有壓力。

後來認真想過為什麼上一款遊戲會這麼慘,大概歸納了幾個原因(參考就好,因為我講的也不見得是對的):
1. 我不該一個人獨自開發一款”連線”遊戲。雖然它不是像一般市面上的online game那樣real-time的運作,但還是個非即時的online game。這意味著有非常非常多的細節,是必須很小心處理及控制的。因為只要一個小問題,可能就會讓遊戲整個沒辦法玩,或作弊玩家滿街跑。所以我花了比開發一個單機遊戲大概兩倍的測試及修改程式的時間,才能做出等量的遊戲內容。以致於開發時間過久…

2. 我不該想模仿一個熱門遊戲的玩法。那個熱門遊戲,其實我自己也玩了很久,也算是熱衷的玩家,覺得有些玩法應該可以改成怎樣做會更好玩。所以我便用我自己的方式,將別的遊戲的玩法,改成我自己覺得喜歡的方式(當然呈現上還是差很多,但核心的玩法蠻接近的)。但,我現在覺得,這樣做徹底錯了!! 為什麼? Indie Game Movie裡的Jonathan Blow曾經說過: 「做為一個獨立遊戲開發者,你不該試著要去跟大廠競爭。你要做的應該是做出一個非常具有個人特色的獨立遊戲來。」。我覺得他說的真的很對,如果你的遊戲跟大廠的遊戲很像… 那玩家為什麼要玩你的? 你敢保證你的遊戲有比大廠做的好玩? 大廠的開發資源(錢)比你多很多,人手一定也是你的好幾倍,你為什麼有信心做的贏人家? (除非你自認為是天踨英才 XDD)

3. 我不該將App下架了快半年。遊戲初期上架後,有幾個狂熱的國外玩家給了我一些遊玩後的回饋意見。建議我可以修改遊戲玩法。我覺得他講的有道理,於是想把整個遊戲的基礎玩法重新大改調整過。由於新的玩法差異實在太大,舊有的Server機制也必須大改才行。所以我決定將App先下架,直到我改好為止才重新上架。但,有做過這件事的開發者大概都會知道… 千萬別這樣做!!! 因為一旦你將App下架了許久之後,你的App也就真的徹底死了……… 就算重新上架,也幾乎完全沒有人可以找到你的App!

後來,在台南兼職工作的那間公司,運作的並不太順利。公司並沒賺到什麼錢,一直在燒錢。陸陸續續有一些員工離職了,最後只剩我一個人。而我也在家裡幫忙維護了公司的網路服務一陣子,不過最後還是離職了。離職後,其實我心裡一直很惶恐,不知道下一步要怎麼走。因為,已經有點年紀了,已經不是七年前還30出頭的年輕小伙子,不能再這樣找不到自己的人生方向了。如果自己獨立開發遊戲,一直沒做出好成績的話,那就要趁早轉換跑道,看要找新工作還是怎樣的。不過,我實在無法忘記自己當初選擇一個人獨立開發的初衷 – 我想要做出一款好玩的遊戲!! 一個讓玩家隔了十年後,還會想到有玩過的好玩的遊戲。我還是很想繼續獨立開發遊戲下去,直到我老到做不了為止。於是,我便跟老婆約定好,再做最後一款遊戲,如果又失敗,我就真的要去找工作了… 很慘,但也沒辦法,人生就是這樣,不是事事都能如意。

於是,前年十月(2015/10)左右,決定開發一款經營模擬類結合一些RPG元素,玩法還蠻特別的遊戲。因為我自己也很愛玩模擬城市、夢幻西餐廳這一類的遊戲,也很愛玩Diablo 2、魔法門這一類的遊戲。(遊戲的點子好像是我上廁所大號還是洗澡時亂想想到的… or 有人托夢給我?(真的有過 @@) 有點忘了… XD)。所以才有了現在這款 – 哥布林的道具屋(Android),今年九月上架在App Store和Google Play上。本來,這有可能是我的告別作了…….. Orz 開發的時間,從一開始點子發想到正式版上架,前前後後大概快兩年了。

到前天為止,剛好已經上架滿三個月了。這次的成績,總算獲得了還不錯的成果。沒有非常好,好到可以當爆發戶 XD。但至少可以讓我再維持一個人獨立開發下去一兩年了。這也是我第一個獲得Apple全球推薦的遊戲App(沒有橫幅,只有小icon,不過也不錯了)。也是我第一個同時上架在Google Play的遊戲App,在今年11月也獲得Google Play的台灣區推薦了。也是我第一次做群募的案子,不過沒成功就是。第一次參加巴哈姆特ACG創作大賽。第一次獲得巴哈姆特的遊戲節目報導。第一次即將參加2018的台北電玩展。

iOS下載曲線圖:

Android下載曲線圖:

為什麼這麼多”第一次”? 因為我告訴我自己,這次再不努力拼下去,可能以後就沒機會了! 我是個個性非常閉俗的怪人、十足的宅男,不太喜歡跟人交際應酬。所以也不太會去參加那種公開的活動或聚會,只喜歡關在家裡低調的閉門造車… 但這次,我真的豁出去了….. 再怎麼不喜歡、沒經驗,我都要去做。有沒有什麼效果不重要,重要的是我至少要”努力過”… 如果沒真的努力過,就以失敗收場。我怕我下半輩子,只會變成一個老人,孤單的活在悔恨之中…

這次的作品,獲得了比較好的成績。我歸納了幾個做的好與不好的地方(參考就好,因為我講的也不見得是對的):
好的地方:
1. 遊戲的內容本身和玩法,真的還蠻特別的。沒在其他遊戲上看過,至少有名的App沒有。其他比較沒名的也許有類似玩法的遊戲App,那我就不知道了。但至少,根據玩家給我的回饋意見,幾乎清一色的都說這遊戲最大的賣點,就是這特別的玩法了,他們從沒玩過。

2. 這次遊戲的宣傳,我真的有比較認真去做,以前從來沒有這麼認真過。兩年前,在開始開發之前,我就先在PTT發文寫了一下遊戲的基本玩法,調查一下玩家的反應。然後在今年五月,正式版上架前,就先開放Demo版給玩家試玩獲得更多的修改建議。在正式上架三個禮拜前,就先在各大國內外遊戲論壇發文和寄新聞稿(這裡要特別感謝Rodan大大的指導!! 還有包子分享「返校」的經驗! 對我的幫助真的不少! 感恩~)。遊戲上架後,寄信給Apple編輯review,詢問他們是否可以幫忙Feature App(其實應該要第一版上架前就要寄的,不過亡羊補牢總比沒有好。以前我真的不知道、也沒去查,不知道在搞什麼鬼… ~”~)。真的,有做有差,雖然一直在copy&paste很辛苦,成效也不見得100%。但套句Rodan大大的說法: 「成效也許只有30分,但你不做就是0分。」。這句話,讓我一直謹記在心…

3. 這次改用Unity開發,同時上架在iOS和Android雙平台上。過去五年,我一直都是用Mac + Xcode,搭配cocos2d開發iOS App。很早就想試也做Android版,但一直遲遲沒有做。這次,我決定真的要做雙平台了。本來還是用cocos2d-x這個Framework開發(其實也是後來才轉的,本來是用cocos2d-iphone。所以,其實又多花很多時間重新熟悉了一下C++。)。結果,開發了大概三四個月左右後。原本在iOS一直都跑的蠻順利的,有一天,我突然想到我都還沒真正在Android上執行試過(最一開始的code本來有在Android上做一次測試,但後來code已經差很多了)。於是,試著deploy到Android平台上去測試。結果,搞了整整一個禮拜,都還是一堆錯誤,連App都沒辦法執行。老天爺! 我才做三個多月寫一點點code就這樣,那以後還要玩嗎!??? 於是當機立斷,決定砍掉重練,把Framework改用Unity 5開發。後來覺得,這真的是個很正確的決定! 因為,Unity跨平台的支援做的真的非常好! 真的只要寫一套code就好! 而且也是免費的!(如果年營收沒有超過300萬台幣的話) 後來花了一段時間,把新的code寫好之後,改用Unity deploy到Android、iOS、Windows、Mac、Web測試過,都沒啥大問題。這結果讓我真的很滿意! 而且Unity的Asset Store上還有一堆可付費或免費下載的plguin工具,真的幫我省了很多開發的時間。超讚!!(很多我自己可能寫不出來或寫出來跑不順的程式邏輯,我就是直接用買的。) 而且,也是改用了 Unity後,才讓我有機會在明年移植做哥布林的PC版(原本根本不得其門而入,因為我沒待過遊戲業,不清楚怎麼做好)。所以我接下來的新遊戲,應該都會全部用Unity開發了,不會想再換。而App的營收,iOS : Android目前約 2 : 1。下載量約 5 : 2 (因為iOS App有獲得全球推薦的關係,不然總下載量應該是Android會比較多才對)。另外還有廣告的營收,大概佔總營收的15%。目前我是用Unity Ads + Chartboost。大陸地區的Android版,則是用Yomob。

4. 這次不同以往,我先發行了BETA版讓玩家試玩。再根據玩家的意見與回報錯誤,修正了不少嚴重的問題和改了比較適合的操作界面 & 玩法調整。假如我沒先開放測試,一開始就直接上正式版的話。那成績可能就不是今天看到的這樣了,不會到平均4.5顆星的滿意度評分。可能也就不會獲得Apple和Google的推薦了(因為,App是否會被推薦,跟平均評分很有關係!!)。其實我以前就知道要做,只是我很懶,想說省去這段功夫,等正式版上架後再改應該也是可以。但,我現在深深覺得,這流程真的不能少! 沒先得到玩家的驗證過,就冒然上架的話,可能就是死路一條!

不好的地方:
1. 我不該在遊戲內容還不足的時候,就開放玩家等級可以玩到Lv99。這樣讓我接下來的改版計劃有點難做。這樣就算改版加了新內容,已經滿等的舊玩家也無法獲得新的遊戲體驗而回鍋玩了。所以應該要分階段更新才對,例如先50級,然後60, 70, 80, 90, 99這樣… 而且遊戲內容不足,就開放比較高的等級讓玩家玩的話,會導致中間升級過程的變化性不夠。玩家一直在做重複的事的話,會容易感到厭煩無聊(作業感重),然後就砍掉遊戲不玩了。比較好的遊戲設計,應該是讓玩家在升級的過程中,獲得足夠的娛樂感與成就感回饋。這樣玩家才會持續想玩下去…

2. 我低估要改接其他廣告SDK和金流平台的難度了。這次的App,我第一次跟大陸的TapTap合作,上架在他們的平台上。但由於大陸地區並無法使用Google Play服務,而且網路無法讀取Chartboost和Unity Ads這兩個廣告平台的資料。所以得另外改接別家大陸專用的廣告平台和金流平台來做IAP商品的購買支付。原本以為應該不難,結果詢問了他們的技術窗口了解怎麼做後,才知道跟我原本想的有落差。而且金流平台的審核流程很複雜,我光要通過開發者身份審核,大概就花了兩個禮拜左右。原本以為金流平台這邊,只要像接Google Play那樣可以直接從手機client端call SDK發出購買請求就行了。結果沒想到,他們不提供這種做法,而是要一侓透過一台Server處理。這樣的話,變成要自己去維護玩家交易的資料保存和驗證了,流程變得有點複雜。其實,我一直很怕去碰金流這段的。因為我知道這種出錯的話就會非常慘,搞不好會被告之類的。所以能不碰就不碰,但這次沒辦法了,如果要做大陸地區玩家的生意,就非得做不可了(不然你就是得忍受Android App免費讓他們玩爽爽,賺不到半毛錢… XD)。這裡不得不誇獎一下TapTap平台,他們的窗口讓我感覺到做事很積極,真的有認真的想幫獨立開發者。而且TapTap算是在大陸”唯一”(應該吧? :p)支持正版App的平台了,上面的玩家素質都還不錯,有認真的在幫App留下專業的評價。讚!!

3. Project曾經砍掉重練過一次。原本是用cocos2d-x, C++開發。後來變成用Unity 5, C#開發。其實這不應該發生在我這種已經做技術十幾年的老工程師身上,菜鳥就算了~ XD。我應該要在開始動工前,就先查好試過比較適合的Framework來用。而不是做到一半,才發現不對勁砍掉重練。這真的很傷本!! 要知道,獨立開發者最最最最最最最最最最最最最最重要的,就是「時間」了!!!!!!!! 任何會浪費多餘開發時間的可能因子,都要盡可能的避免! 因為,時間就是獨立開發者最大的成本! 時間就是一切! 而且我不是浪費幾天而已,我是浪費了四個多月… 如果要寫一段code來說明時間與獨立開發者之間的關係的話,大概就是像這樣↓ XDD

while(time == money) {
   work();
}

4. 正式版上架後,出現了一個很嚴重的Bug,導致部份玩家的怪物等級暴增。遊戲最怕的就是遇到這種問題,因為一旦發生後,你等於就是損失這個潛在的死忠玩家了… 因為玩家靠bug達到最高等級後,原本該有的遊戲體驗全部不見,再也回不來了(你改100版都沒用)! 不過幸運的是,還好這bug是發生在我App被Apple全球推薦之前。所以影響的玩家沒有很多,算是不幸中的大幸(感謝以前同事 老詹 先生狂玩我的遊戲,遇到這個bug回報給我。不然我不知道要等多久後才會發現… @@)。以後正式上架前,還是做足測試確認才好(不過這個bug要等到玩家30級以上才可能會遇到,所以在BETA版時只開放到20級,玩家根本測不到… Orz)。

明年,我的開發計畫大概也差不多想好了…
1. 把道具屋剩下的改版完成,增加更多的怪物和物品屬性、新設備等等的。然後我想把遊戲內容大改,改成賣斷制的玩法上架在Steam上。PC遊戲市場和手遊市場,有個很大的差別是: PC玩家喜歡直接買斷一個遊戲玩,NT$300、500、1000都好(獨立遊戲的定價,大概是落在NT$150 ~ 500之間),他們都願意買,只要你的遊戲內容夠好,真的有吸引到他們。但如果你做的像手遊的IAP付費那樣,一直靠賣DLC來賺錢的話,你會被玩家公幹死! XD 我從來沒做過PC Game,但我覺得Steam對於獨立開發者來說,相對是個比較友善的環境(不過今年Steam上了新的Direct機制取代以往的Greenlight審核機制,導致有大量的糞Game(聽說很多連一套都賣不了)上架。所以搞不好接下來就會變的像App Store、Google Play那樣… :( )。不過,不管結果如何,我都很想上架到Steam試試看,也許是做白工賺不了什麼錢。但如果沒有真的試過的話,一切都只是猜測而已,你猜了十年也不會得答案。套句阿甘他老母的話: 「人生就像是一盒巧克力一樣,你永遠不會知道下一個拿到的是什麼。」 :P

2. 開始開發Monster Lord的二代。這算是我第一個小有成績的遊戲,到現在都一直還有玩家會付費買東西,雖然不多。但你要想,這已經是六年多前的遊戲App了,如果還一直有玩家玩,那代表這遊戲是有潛力再做的更好的! 所以我早已經發包給原來配合的美術(大家如果想要找人接案畫圖,也可以找他,我很推薦! 我還蠻喜歡他的奇幻風格畫風的~ ^^)了,預計會增加到100種不同的怪物。敬請期待! :D

3. 有時間的話,還想再做一個生存、建造類的模擬遊戲,像Steam上的Craft the World, Oxygen Not Included, Don’t Starve, Factorio這種的。因為我很愛玩!! 也想試試看做一個給自己玩! XDD 但這次我不會再犯像Galaxy Lord一樣的錯誤,我會完全靠自己憑空發想,想出一個好的點子後再開始做~ :)

大概先這樣,有想到什麼再補上來…
再寫下去就變萬言書了(還是字數早就已經破萬了? 我沒算… XDD)

2017/12/20 筆

——————————————————–
相關文章:
一個人獨立開發iPhone App的甘苦談…
一個人獨立開發iPhone App一年半回顧

【iPhone App】新遊戲App: Ultimate Fleet 的開發筆記

Saturday, September 8th, 2012


(PS. 這App Logo跟目前上架的不一樣,因為下一版才會用新做的Logo :p)

前言
今天Ultimate Fleet App終於上架了! \ ̄▽ ̄/ 心裡當然是很興奮,因為這次做了好久。這個App的idea,其實從去年年初就有了,但那時還沒有想過真正要把它做出來。因為那個時候,我根本還沒有寫過任何一款iOS的遊戲。如果那時候就開始動手做,對我來說實在太難了。真正開始做,是從今年過完農曆年後那時候。因為那時候前一款遊戲Monster Lord也改版改得差不多了,比較有空想想新的東西。而且最重要的原因是,過完年後我才確定可以再繼續寫iOS App下去(詳情請看另一篇)。

遊戲設計 & 起源

之所以會有這款遊戲的誕生,其實要把時間拉到20年前,也就是差不多我國中的時候(我好老 ~”~)。那個時候我和我哥買了一款簡單又好玩的太空戰略遊戲,名字我實在想不起來,而且也不是什麼超級大作。那時候畫面還是單色的,戰機的樣子和遊戲玩法也蠻陽春的,就是不斷得出任務賺錢、賺經驗值。不過每隔一段時間飛行員就會老死,得另外重新開始一個新飛行員和戰機(我對這點設計實在有點討厭,為何不讓我可以保留呢 \_/),但之前賺的錢會留著。不過它的任務還蠻多種的,有的是要去救一架友軍的戰機,有的是要協助防衛太空站…等等的。而且,不同的武器特性會對目標造成不同的作用傷害,這點深深吸引了我。所以我很喜歡一再得嘗試新的組合,試著讓我的戰機變得非常強大。尤其是看著自己戰機發射無數的雷射、砲彈把敵人戰機打爆的那一個瞬間,很有快感~ XD。但後來,這二十年來,我就再也沒玩過類似的遊戲了,即便是我已經玩過上百種遊戲過。一直到長大工作了好幾年後,我一直在等有一天有人會做出一個像我那時候玩到的那款遊戲一樣。但很不辛的,真的一個也沒有(有些可能有點類似,但還是不太一樣)。也因此,我才會想要做一個自己也很愛玩的這種太空戰機類型的SLG遊戲,算是滿足自己兒時的夢想吧。

遊戲中戰鬥的部份,有蠻多是參考自我記憶中的那款遊戲的玩法。例加武器的類型有分成穿刺、破壞、熔化三種,而我自己又多加了一種弱化的類型,當擊中目標時會各自有不同的變化。所以玩家需要自己嘗試各種組合,看哪一種組合比較適合。而另外我又多加了許多副屬裝備和傭兵系統,這部份完全是新的,是以前那款遊戲中所沒有的。副屬裝備的作用是來增加戰機的能力,例如: 可以暫時飛得比較快快、可以暫時無敵…等等的。傭兵系統的靈感則是來自於玩過的魔法門七。而戰鬥方式就跟以前我玩到的方式一樣,用六角格地圖和回合制的方式來執行。這部份對我來說非常苦手,因為我以前完全沒有開發過像這種六角格地圖的戰棋遊戲,連演算法還有很多AI都不知道該怎麼開始寫。所以在開發的期間,有一大段時間都是在摸這些遊戲的演算法,到處找網路上遊戲高人自己寫的教學。還好這不算是很冷門的遊戲演算法,還蠻多資料可以參考的。說真的,我覺得自己居然可以把演算法寫出來,真的是很神奇的一件事。在開始做之前,我還會怕說萬一演算法寫不出來怎麼辦… ~”~ 但我還是硬逼著自己一定要試,一定要做出來!! 感謝老天賜我神力… ~o~ 這裡面,其實有很多的細節要做,例如說: A戰機攻擊B戰機時是在它的30度角的方向,所以程式要判斷A是攻擊B的”前端”部份,因此要損壞的部位應該是B戰機的前端護甲。還有例如: 當戰機要攻擊時,必須很快得取得它前方n格範圍內所有可被攻擊的敵方戰機資料。因為我不想用while迴圈慢慢一個一個找,而是想用複雜度為常數的演算法一次解決,這也讓我搞了好久,一直試不出正確的,還好最後有生出來… ~”~。

美術和UI

這次遊戲中的美術和UI部份,幾乎全是我一個人包辦的,只有幾個page的背景圖是用買的,還有人物的頭像是外包請人畫的。有很多介面設計的靈感是參考自國外這位天才設計師的作品,然後自己慢慢try,做出有點像未來電腦使用的半透明發光介面。戰機的部份,則是去3D studio這個網站去買一些3D模型,再輸出成2D圖片自己套。3D圖像這部份之前也沒摸過,所以也是慢慢試了好久。做過才知道,原來3D的檔案格式和工具還有分這麼多種。花了好多時間在try怎麼把買來的3D模型成功正確得輸出。有些3D模型買來後,不知道是因為工具版本不合,或是本來就要再花時間自己慢慢貼材質,搞半天 ~”~。

遊戲配樂、音效
這部份跟之前一樣,也是都在SoundSnap這個網站買背景音樂和音效來用,比較沒什麼大的差別。這次背景音樂曲風絕大多數都是比較緊湊偏搖滾類的,比較符合太空未來的場景。

程式

跟前一款遊戲一樣,一樣是純Objective-C code + 半套cocos2d(只用粒子效果)。比較不一樣的部份是這次處理的邏輯演算法比較沒有像之前怪物有各種狀態疊加在一起那麼複雜,大部份都是在算角度、算距離,比起來比之前的簡單一點。難的部份前面提過,就是六角格地圖(Hexagon-Based Tile Map)演算法還有path finding的部份。Path Finding的演算法,最後是採用A*這套演算法,概念不算太難,第一次看的人應該就看的懂,只是要花點時間。電腦戰機AI的部份,倒是比原本想的簡單,蠻單純的,只要讓戰機找到最短路徑會追殺某一架玩家的戰機或特定友軍戰機就好。不用像之前要判斷一大堆怪物狀態和魔法才能做決定。

後記
其實這次開發的時間比我原本預估的多蠻多的。原本是預估四個月左右就要完成,沒想到拖了半年多(可能跟D3發片也有點關係 ~”~)。可能是這次我對畫面上的要求比較嚴格吧,很多UI介面的圖片做好之後,我一再的修改又修改。還有遊戲音效也是,tune了好久,常常一個音效弄好之後隔幾天自己測試覺得感覺不對,又一直調。另外就是這次企劃的時間也比之前多很多,因為想要一開始推出的版本就能達到一定的水準,不想讓玩家覺得好像有點單調,所以比之前的作品多加了很多不同的玩法或元素進去。之後的改版,我還是會再一直追加新的東西進去,希望能給玩家有更多的驚喜和變化。我自己真得也很愛玩這個遊戲,有時候明明7點多想好要去吃飯了,可是因為戰鬥打到一半覺得沒把敵人全都打爆就會有點難過 XD 目前進度聲望大概一萬多左右 :P 。未來改版應該還會加和不同玩家對戰的模式,不過我還在想要怎麼做才比較公平,等以後囉~ :mrgreen:

如何在Objective-C中宣告一個 private function?

Sunday, September 2nd, 2012

這是一個很簡單很基本的問題,寫過Java或C++的人都知道怎麼寫
不過,Objective-C居然沒有支援,這讓我從兩年前開始學Objective-C時就覺得很納悶
我也沒有特別去找有沒有什麼方法可以做到,今天在看cocos2d的書時剛好有講到,寫下來免得忘記

方法就是在 .m 檔裡的 @implementation 之前另外加入 @interface 的宣告 (一般而言 @interface 都是在 .h 裡做)
例:

#import “MyClass.h”
@interface MyClass()
- (void) doMyPrivateFunction;
- (int) getMyMagicNumber;
@end

@implementation MyClass
….. (略)
@end