音游的核心玩法
nekocon
音游核心玩法的需求
- 判定、狀態(tài)(邏輯)
- 動畫、特效、UI(表現(xiàn))
代碼設(shè)計和技術(shù)總結(jié)上細(xì)分為

判定
設(shè)計:
將一個時間段預(yù)先根據(jù)譜面和note的判定區(qū)間分為n個已知判定結(jié)果的區(qū)間

將所有note的判定區(qū)間和結(jié)果存在容器中,以毫秒為單位作為key,以結(jié)果Perfect、Great、None作為value.
前后note的區(qū)間重疊有判定優(yōu)先級之分
優(yōu)點:判定效率取決容器的尋址速度,而不是等式判定,會更高效率,更快。缺點:數(shù)據(jù)量比較大
技術(shù)總結(jié)
根據(jù)順序,判定會經(jīng)過如下3個模塊
- 觸碰
- iOS、Android原生觸碰代碼
- 判定
- FixedUpdate、Update的區(qū)分
- 規(guī)范高效的代碼
-
音頻
- BGM
- key音
狀態(tài)(buff)
設(shè)計
- 定義:游戲內(nèi)所有和數(shù)值有關(guān)的行為和規(guī)則,都理解為狀態(tài),如扣血、加fever、fever期間暴擊等
- 難點:這是策劃內(nèi)容最多變的地方,為了應(yīng)對核心玩法中最冗亂、復(fù)雜的模塊,必定需要一種編程模式去實現(xiàn)
技術(shù)總結(jié)
拋棄具象的Entity編程模式,改用抽象接口去實現(xiàn)解耦,用組合替換繼承
public interface IBuff
{
void Execute();
}
public class Hurt : IBuff
{
public int value;
public void Execute()
{
CharacterManager.instance.hp -= value;
}
}
//Init note damage buff
IBuff hurt = new Hurt
{
value = damage,
};
//Execute when note attack
hurt.Execute();
事件(event)
再復(fù)雜的兩層關(guān)系,都可以通過中間層解決-魯迅
示例1,邏輯和表現(xiàn)、數(shù)據(jù)的代碼都放在一起,造成耦合:
//如果擊中Perfect區(qū)間
if (m_TimeNodeOrders[Touch.instance.touchtick] == PERFECT)
{
//生成Perfect特效
EffectManager.instance.PlayPerfect();
StaticManager.instance.AddPerfectCount();
}
示例2,游戲邏輯只和event有關(guān)系,而event作為中間層和其他層產(chǎn)生關(guān)系,匿名者原則
//下面腳本放在游戲事件驅(qū)動器GameEvent中
EventManager.instance.Regist("OnPerfectHitted").trigger += EffectManager.instance.PlayPerfect();
EventManager.instance.Regist("OnPerfectHitted").trigger += StaticManager.instance.AddPerfectCount();
//如果擊中Perfect區(qū)間
if (m_TimeNodeOrders[Touch.instance.touchtick] == PERFECT)
{
//觸發(fā)事件
EventManager.instance.Invoke("OnPerfectHitted");
}
游戲表現(xiàn)(view)
設(shè)計
定義:游戲中的實體表現(xiàn),分別有note、人物、特效、UI
技術(shù)總結(jié)
-
緩沖池(Pool)提高note和特效的生成效率、降低內(nèi)存負(fù)擔(dān)
-
動畫狀態(tài)機(FSM)提高腳本的靈活性和準(zhǔn)確性
-
數(shù)據(jù)綁定(binding),讓一些數(shù)據(jù)的綁定免去重復(fù)沒有創(chuàng)造性的代碼
-
著色器(shader)優(yōu)化長按效率,組合圖案形成長按,剔除,在像素著色器做透明處理
面臨的一些問題
安卓機型的硬件不統(tǒng)一,造成適配問題
- 游戲卡頓
- 音頻延遲
改進
- Unity2018.3開始了新的GC系統(tǒng)可以暫時禁用GC以避免卡頓,Unity2019引入了一種新的GC工作方式,incremental GC。
- Unity2018引入和ECS框架,可以更大程度地去應(yīng)用設(shè)備的多核功能,以優(yōu)化游戲核心玩法的流暢度與卡頓。
- Unity2018應(yīng)用了新的音頻系統(tǒng),低延遲播放音頻。
- 核心玩法的數(shù)據(jù)綁定不再用可視化工具,而是純代碼執(zhí)行
- Criware,Superpowered等一些第三方的音頻中間鍵



