音游核心玩法

音游的核心玩法

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)一,造成適配問題

  • 游戲卡頓
  • 音頻延遲

改進

  1. Unity2018.3開始了新的GC系統(tǒng)可以暫時禁用GC以避免卡頓,Unity2019引入了一種新的GC工作方式,incremental GC。
  2. Unity2018引入和ECS框架,可以更大程度地去應(yīng)用設(shè)備的多核功能,以優(yōu)化游戲核心玩法的流暢度與卡頓。
  3. Unity2018應(yīng)用了新的音頻系統(tǒng),低延遲播放音頻。
  4. 核心玩法的數(shù)據(jù)綁定不再用可視化工具,而是純代碼執(zhí)行
  5. Criware,Superpowered等一些第三方的音頻中間鍵
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 回顧 DJMAX 系列系統(tǒng)設(shè)計上的進化。 引言 之前看到關(guān)于 Pentavision 的解體的新聞,這意味著 DJ...
    jagttt閱讀 1,001評論 0 2
  • 作者:一字馬胡 轉(zhuǎn)載標(biāo)志 【2017-11-12】 更新日志 日期更新內(nèi)容備注 2017-11-12新建文章初版 ...
    beneke閱讀 2,330評論 0 7
  • 認(rèn)真對待每一件事情,即使不知道這件事有沒有結(jié)果,只要努力認(rèn)真對待,也許會有好的結(jié)果呢?。?/div>
    花開花落花滿天09閱讀 319評論 0 0
  • 長輩們一路對我照顧關(guān)愛有加,不止感謝,更是暖心。 西藏之旅,本是不情愿,但卻意外收獲很多。正如當(dāng)兵后悔兩年,不當(dāng)兵...
    最美李清照閱讀 312評論 0 6
  • “懷舊是一種錯覺,甚至它更可能是一種幻覺,有人用過這樣一個比喻,比喻記憶本身是葡萄,那么回憶的過程就是發(fā)酵,每個人...
    _卷葉收顏閱讀 337評論 0 0

友情鏈接更多精彩內(nèi)容