前言
在游戲開發中,我們的開發流程一般是
- 制作預制體或者場景
- 創建腳本、聲明屬性
- 拖拽節點設置屬性
- 編寫邏輯
我開發了款半自動代碼生成器工具主要是解決第2步的問題;之所以稱之為半自動,因為我覺得全自動代碼生成器應該做到兩點:代碼生成(第2步)+自動綁定(第3步)。自動綁定需要改動預制體文件,由於所有人的使用方式不盡相同,出現的問題會比較多,我喜歡相對靈活,約束比較少的方式,所以我采用了拖拽設置和代碼設置相結合的方式解決自動綁定的問題。
功能介紹
-
導出與預制體同名的類文件
-
聲明屬性
-
如果屬性是無效值進行賦值
-
如果屬性是按鈕,進行函數監聽,並生成監聽函數
-
將生成的類導出到指定目錄
-
支持導出指定預制體文件或者目錄,自動實別目錄的子目錄。
-
支持導出Creator 和 Laya 的預制體
-
使用TAG標記是否導出指定名稱的屬性,帶有TAG標記符號的節點才會導出,我TAG是$。如果TAG是無效字符,那么會導出所有名稱有效的節點。
-
creator導出的屬性名稱后面帶有類型,button帶有sprite會同時輸出。
目錄說明
creator_export:creator文件導出目錄,這個目錄工具會創建並且可以放到其他地方。
creator_prefabs: creator文件輸入目錄,一般會設置為項目的預制體文件夾。放到這里只是測試使用。
laya_export 和 laya_prefabs :同 creator文件夾。
creator_build.bat: window下的運行腳本,實際上就是直行node 並傳遞兩個參數。如果是mac用戶可以自行寫一個sh腳本。
creator_prefab.js: creator文件導出的核心代碼。
creator_template.txt: creator導出文件的模板文件,理論上就是字符替換。
file_util.js : 文件輔助類
laya_build.bat,laya_prefab.js,laya_template.txt: 同creator文件。
完整代碼
- creator導出文件
import BaseView from "../../../cfw/mvc/BaseView";
const { ccclass, property } = cc._decorator;
@ccclass
export default class LoginView extends BaseView {
@property({type: cc.Sprite, displayName: "logointro$Sprite"})
logointro$Sprite: cc.Sprite = null;
@property({type: cc.Sprite, displayName: "btn_buy_big$Sprite"})
btn_buy_big$Sprite: cc.Sprite = null;
@property({type: cc.Button, displayName: "btn_buy_big$Button"})
btn_buy_big$Button: cc.Button = null;
onLoad() {
if(!this.logointro$Sprite){this.logointro$Sprite = this.findChild("logointro$").getComponent(cc.Sprite)}
if(!this.btn_buy_big$Sprite){this.btn_buy_big$Sprite = this.findChild("btn_buy_big$").getComponent(cc.Sprite)}
if(!this.btn_buy_big$Button){this.btn_buy_big$Button = this.findChild("btn_buy_big$").getComponent(cc.Button)}
this.registerButtonByNode(this.btn_buy_big$Button,this.onbtn_buy_big$ButtonClick)
}
onbtn_buy_big$ButtonClick(){
}
onDestroy(){
}
}
- laya導出文件
import BaseView from "../../../cfw/mvc/BaseView";
export default class TestView extends BaseView {
/** @prop {name:normal, tips:"normal", type:Node, default:null}*/
public normal: Laya.Button = null;
/** @prop {name:double, tips:"double", type:Node, default:null}*/
public double: Laya.Button = null;
constructor() { super(); }
onAwake() {
super.onAwake()
if(!this.normal){this.normal = this.findChild("normal")}
this.registerButtonByNode(this.normal,this.onnormalClick)
if(!this.double){this.double = this.findChild("double")}
this.registerButtonByNode(this.double,this.ondoubleClick)
}
onEnable(): void {
}
onDisable(): void {
}
onnormalClick(){
}
ondoubleClick(){
}
}
注意事項
- 節點的名稱不能有空格,橫線
- 不能用引擎已經使用的變量名
結語
工具已上傳到框架倉庫中,有需要的自行拉取,如遇到問題可以微信找我溝通。
歡迎掃碼關注公眾號《微笑游戲》,瀏覽更多內容。
歡迎掃碼關注公眾號《微笑游戲》,瀏覽更多內容。