Crystal Hangul

A collection of 6 posts
iOS 開發

遊戲音訊的爆音除錯:四輪修復的踩坑記

Crystal Hangul 的試玩回饋裡,「爆音」這個詞出現了三次。第一次是進戰鬥的時候,第二次是殺第一隻敵人的時候,第三次是戰鬥結束跳結算畫面的時候。三個爆音的原因各不相同,我修了四輪才全部解決。 第一輪:進戰鬥爆音 玩家從選關畫面進入戰鬥,畫面切換的瞬間聽到一聲短促的 click。每次進關都會發生。 原因是 AVAudioSession 和 AVAudioEngine 的第一次啟動。iOS 的音訊硬體在 session 被啟用的那一刻會做一次配置,這個配置過程會產生一個聽得到的 click 聲。原本的 code 在進入戰鬥時才啟動音訊引擎,所以每次進關都是一次「第一次啟動」。 我把啟動時機移到 App 啟動畫面的背後。App 一開的時候就呼叫 prewarm(),把 session 啟用、引擎跑起來、所有音效 buffer 全部預載。之後進戰鬥、回選單、再進戰鬥,音訊引擎全程在跑,
閱讀時間 6 分鐘
iOS 開發

在地化雙語支援:讓遊戲同時服務中文和英文玩家

Crystal Hangul 是一個韓文學習遊戲。遊戲裡有三種語言同時在場:韓文(學習目標)、中文(母語解說)、英文(給非中文母語的玩家)。韓文永遠原文呈現,中文和英文之間可以在標題頁切換。 聽起來很單純,做起來踩了不少坑。 三種語言,兩種角色 韓文在這個遊戲裡的角色和中英文不同。韓文是學習內容,玩家要看、要拼、要聽 TTS 發音。韓文字塊上面的文字、句子的韓文原文,不管選什麼語系都不會變。 中文和英文是「解說語言」。UI 上的按鈕文字(「開始」/「Start」)、文法解說(「은/는 主題助詞」/「은/는 topic particle」)、句子翻譯、字塊的逐字釋義,這些跟著玩家選的語系走。 這個區分很重要。如果我不小心把韓文也加進在地化系統,玩家切到英文的時候韓文字塊會變成英文翻譯,遊戲就失去了學韓文的意義。 Loc.t:最簡單的雙語切換
閱讀時間 6 分鐘
五聲音階組句:用音樂理論設計遊戲音效
iOS 開發

五聲音階組句:用音樂理論設計遊戲音效

Crystal Hangul 的字塊點擊音效不是從素材包裡挑的。每點一個字塊,你聽到的音高由它在句子裡的位置決定。第一個字塊是 Do,第二個是 Re,第三個是 Mi,依此類推。拼完整句之後,會落一個 Do-Mi-Sol 和弦收尾。 拼句的過程聽起來像在彈一段上行旋律。拼得越順,旋律越流暢。答錯的時候聽到一個低沉的 deny 音效,旋律斷掉。combo 連續答對的時候,背景音樂會加入新的樂器層。整個聽覺體驗和遊戲表現綁在一起。 為什麼用五聲音階 五聲音階(pentatonic scale)只有五個音:宮、商、角、徵、羽,對應西方的 Do、Re、Mi、Sol、La。它的特色是沒有半音,任何兩個音放在一起都不會產生不和諧的感覺。 這個特性很適合遊戲音效。玩家點字塊的順序是固定的(句子的正確語序)
閱讀時間 6 分鐘
試玩回饋驅動開發:十幾條真實反應怎麼改變一款遊戲
Crystal Hangul

試玩回饋驅動開發:十幾條真實反應怎麼改變一款遊戲

Crystal Hangul 上架之前經過了兩輪試玩。我把未完成的版本丟給朋友玩,坐在旁邊看他們操作,記錄他們卡住的地方和說出來的話。兩輪下來收到了十幾條回饋,每一條都對應了一個具體的改動。 試玩回饋改變了遊戲的面貌。有些問題是我自己測一百次也不會發現的,因為我太熟悉自己的遊戲了。 「太快了,來不及想」 這是第一輪試玩最普遍的回饋。試玩者看到韓文字塊,還在辨認是哪個字,敵人就走了一大段。他們不是看不懂韓文,是需要幾秒鐘把字塊和意思配對起來。 我把第一章的敵人速度壓低了將近一半,逐波微升。第一波還加了順序數字提示,讓新玩家先學會「按順序點字塊」這個操作,不用同時處理語言辨認和遊戲規則。 第三章的回饋更具體:「3-2 開始太快了,來不及看字跟讀」。第三章的句子從 3 塊升到 4 塊,每句需要更多時間辨認。我把整個第三章的敵人速度和血量都調低,讓壓力來自語言本身而不是手速。 「出怪點被動態島擋住了」 這個問題我在模擬器上不會發現,因為模擬器的動態島跟實機大小不同。試玩者拿 iPhone 15 Pro 玩,敵人從畫面頂端生成的時候被動態島完
閱讀時間 7 分鐘
拼句子建塔:把語言學習塞進塔防機制
Crystal Hangul

拼句子建塔:把語言學習塞進塔防機制

塔防遊戲的核心循環是:敵人來了,蓋塔擋住。Crystal Hangul 把「蓋塔」這個動作換成「拼韓文句子」。畫面下方有一排打散的韓文字塊,玩家按正確順序點選,拼完一句話就蓋一座塔。敵人在上面走,塔在下面長,你拼得越快塔打得越痛。 把語言學習塞進塔防機制,最難的部分是讓兩者的節奏對上。拼句子需要思考時間,塔防需要時間壓力。思考時間太長敵人就走進核心了,時間壓力太大玩家就沒辦法好好讀句子。這篇記錄我怎麼處理這個矛盾。 塔 = 你的記憶 Crystal Hangul 有三種塔:名詞塔、動詞塔、助詞塔。每種塔對應一種文法。開局的時候場上沒有任何塔,是空地。 玩家第一次拼對某個文法的句子時,對應的塔才會從地底長出來。名詞句拼對了,名詞塔出現。動詞句拼對了,動詞塔出現。塔出現的瞬間會產生一圈脈衝波,對附近的敵人造成傷害。 之後每拼對一句同文法的句子,那座塔就會立即發射一道強光束打向最前面的敵人。拼得越快,光束越強。連續答對不出錯的話,combo 倍率會一路往上加。 這個設計讓「學習」
閱讀時間 7 分鐘
用 RealityKit 做 2.5D 塔防:為什麼不用 SpriteKit
iOS 開發

用 RealityKit 做 2.5D 塔防:為什麼不用 SpriteKit

Crystal Hangul(水晶韓語塔防)的玩法是 2D 的:敵人沿著固定路線走,玩家在路邊蓋塔。但整個場景是用 RealityKit 做的 3D 渲染:低多邊形的水晶漂浮在夜空中,塔是旋轉的幾何體,敵人死的時候碎成晶片四散。 我最初考慮過 SpriteKit,最後選了 RealityKit。以下是原因和過程中遇到的挑戰。 SpriteKit 做不到的東西 Crystal Hangul 的美術方向是「低多邊形水晶」。塔是正四面體、正八面體、正十二面體,面與面之間有銳利的折角,在光線下產生不同的明暗。敵人是隨機擾動的碎晶,每隻長得不一樣但風格一致。場景裡有漂浮島、水晶尖刺、發光的裂縫門。 這些東西在 SpriteKit 裡要用預先畫好的 2D 圖片模擬。水晶的光暈可以用半透明的 sprite 疊出來,但旋轉的時候會露餡,因為 sprite 是平的。光影變化要手動畫多幀或用
閱讀時間 6 分鐘