博客 / 詳情

返回

其實Creator裏面這個裁剪代碼的功能很好用,建議試試

點擊上方<font color=blue>億元程序員</font>+關注和<font color=orange>★</font>星標

引言

哈嘍大家好,無論是個人的小遊戲項目還是公司的商業遊戲項目,通常都會進行多平台分發。

例如個人小遊戲可以上架微信小遊戲、抖音小遊戲,公司的商業遊戲除了可以上架前面兩個平台外,還可以上架渠道(OV華)、AppStore等等。

遊戲要上架不同的平台,意味着要接入不同的SDK,特別在遊戲快要不行的時候,嘗試更多平台(bt、0.1等等),久而久之,對接不同平台/渠道的代碼會越來越多。

事實上,某個平台/渠道的接入代碼,只有對應的那份代碼才會有用,其他的都是多餘的,所以我們可以考慮把多餘的代碼根據不同的平台進行裁剪。

上面是隔壁Unity通過宏定義的方式,對代碼進行裁剪,針對不同的平台、版本寫不同的代碼進行兼容。其實在Creator裏面也有的,很多人都不知道。

言歸正傳,本期帶大家一起來看看,如何在Cocos遊戲開發中,自定義插件根據不同平台利用宏定義裁剪代碼

本文源工程可在文末獲取,小夥伴們自行前往。

什麼是宏定義?

相信小夥伴們剛接觸編程時,學過C語言的都瞭解宏定義:

宏定義(macro)是編程語言中一種預處理機制。

例如#define ; ;(舉個例子活躍下氣氛,這樣寫是不對的),正確的用法如下#define MAX(a,b) ((a)>(b)?(a):(b)),將比較大小的方法用MAX代替。

與宏定義密切相關的是條件編譯。

什麼是條件編譯?

條件編譯是根據預定義的條件,在編譯階段選擇性地包含或排除一部分源代碼。編譯器只會編譯那些滿足條件的代碼塊,而忽略不滿足條件的部分。

條件編譯需要基於某些“條件”來做決定,這些條件通常就是是否定義了某個宏,或者宏的值是什麼。

通俗地理解就是,不符合宏定義內的代碼,會在編譯後"刪掉"。

例如C語言中根據不同操作系統輸出不同的內容。

#ifdef _WIN32
    printf("Running on Windows.\n");
#elif __linux__
    printf("Running on Linux.\n");
#endif

又如Unity中的自帶的編輯器、不同平台的宏。


#if UNITY_EDITOR
    // Unity 編輯器內運行
#endif
#if UNITY_IOS
    // iOS 平台
#elif UNITY_ANDROID
    // Android 平台
#endif

那Creator呢?

Creator中的宏定義

Creator中的宏定義可以通過菜單項目->項目設置->宏配置打開面板進行編輯(CRUD)。

如圖我們定義了ANDROIDDEBUGLOG三個宏,打鈎後表示該宏生效,根據實際要求打鈎即可。

使用方法如下:

  • 通過import { ANDROID, LOG, DEBUG } from 'cc/userland/macro';
    引入對應的宏。
  • 通過常規的ifelse判斷即可,編譯後只會保留符合條件分支內的代碼。

自定義插件裁剪代碼實例

要實現在不同的平台,激活不同的宏,保留指定的代碼,我們需要動態地改變宏的值。

實例通過自定義插件來實現。

1.創建插件

首先要創建我們的插件,通過菜單擴展->創建擴展打開擴展創建面板,選擇構建插件,並且通過擴展管理器啓用插件。

2.擴展構建面板

builder.ts中,刪除不需要的代碼,添加一個自定義宏的輸入框,用於不同的平台輸入指定的宏,用;隔開。

效果如下

3.插件整體流程

開始—>構建前解析面板輸入的宏->讀取已有宏配置->修改激活對應的宏->保存新的宏配置->構建->構建後恢復對應的宏->結束
  • 構建前處理:在onBeforeBuild中進行構建前處理。
  • 解析輸入的宏
  • 讀取已有宏配置,配置在文件settings\v2\packages\engine.json,通過fs模塊讀取內容:
  • 內容macroCustom字段中,大致如下:
  • 修改激活對應的宏
  • 保存新的宏配置:通過await Editor.Message.request('project', 'set-config', 'engine', 'macroCustom', engineConfig.macroCustom);消息進行保存。
  • 構建後恢復宏配置:為了避免構建後宏影響了其他平台,我們需要將對應的宏進行恢復:

4.效果演示

在插件目錄,安裝依賴npm install和構建插件npm run build

新建android平台,自定義宏中輸入ANDROID;DEBUG;LOG

新建web平台,自定義宏中輸入DEBUG;LOG

分別進行構建:

構建完可以看到,只保留了對應宏內的代碼,if、else都剔除了


android:

web:

結語

Creator裏面這個裁剪代碼的功能真的很好用。

小夥伴們覺得如何呢?

本期完整示例工程可以通過閲讀原文獲取,這不僅是知識的獲取,更是對筆者的支持和認可,感謝支持!

我是"億元程序員",一位有着8年遊戲行業經驗的主程。在遊戲開發中,希望能給到您幫助, 也希望通過您能幫助到大家。

AD:筆者線上的小遊戲《打螺絲闖關》《貪吃蛇掌機經典》《重力迷宮球》《填色之旅》《方塊掌機經典》大家可以自行點擊搜索體驗。

實不相瞞,想要個愛心!請把該文章分享給你覺得有需要的其他小夥伴。謝謝!

推薦專欄:

知識付費專欄

你知道和不知道的微信小遊戲常用API整理,趕緊收藏用起來~

100個Cocos實例

8年主程手把手打造Cocos獨立遊戲開發框架

和8年遊戲主程一起學習設計模式

從零開始開發貪吃蛇小遊戲到上線系列

點擊下方<font color=gray>灰色按鈕</font>+關注。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.