cocos 無法設定Node layer屬性

abc126655發表於2024-05-30

升級到3.83之後突然無法設定Node layer屬性,編譯器開啟之後無法儲存

1.刪除temp,library資料夾後重新開啟,(仍無法解決。)。 原以為升級之後問他資源沒有升級導致

2.為什麼開啟prefab之後又恢復layer屬性??
分析原因:cocos editor裡的屬性是從全域性變數裡讀. 在瀏覽器環境中 cc 是一個全域性變數,可以透過 cc.director.getScene().children 獲取場景中的節點,知道這點就可以開發了,剩下的就是節點資料如何展示出來的問題了。editor是electron開發,裡面也相當於一個chorme瀏覽器。那麼就是prefab instance()之後layer屬性被修改。
1.嘗試:除錯instance()程式碼。editor是electron 程式 按ctrl+ shift+i可以開啟除錯介面,但是程式碼檔案是無法開啟,程式碼經過保護
2.解決方法: 自已寫個簡單測試程式碼,用瀏覽器執行除錯 發現 migrate-canvas.ts中改了原型,導致設定parent之後layer被改成父級canvas裡camero的layer了

Node.prototype.setParent = function (value, keepWorldTransform) {
setParentEngine.call(this, value, keepWorldTransform);
if (!value) return;
// find canvas
let layer = getCanvasCameraLayer(this);
if (layer) {
this.layer = layer;
setChildrenLayer(this, layer);
}
}

總結: 升級3.83之後,在預覽模式下bundle裡的全域性程式碼已經載入執行了,這是升級後導致這個問題出現的原因.因為是全域性程式碼,修改後重新開啟cocos editor 就可以了

相關文章