這里一共有三部分
提一下,因為有坑
接下來用 C++ 偽代碼表示 藍圖代碼
一種常見情形,就是我基類BP_A
綁定了 Lua 去覆寫邏輯,然后藍圖類派生了其他類,比如 DataOnly 藍圖只配置數據不寫邏輯,最后場景里只扔了派生類BP_C
實例
這里有一點切記
有一點需要注意,BP_C和BP_B的GetModuleName不能有實現,不然modulename就會變成“長度為0”的字符串了,那肯定不會調到
class BP_A : UnLuaInterface {GetModuleName =>"BP_A"; }
class BP_B : BP_A {GetModuleName =>""; } // 派生,沒綁Lua
class BP_C_DataOnly : BP_B {GetModuleName =>""; } // 派生,沒綁Lua
UE5 里 在 BP_C 里雙擊 GetModuleName 就會實現 GetModuleName
然后變成這樣,藍圖會有 * ,代表修改了,非常坑爹
也提一下,但是純Lua 的 OOP 實現是一個經典問題,在此不再復述
如果 BP_B 也要用 Lua 覆寫,那么 Lua 里也要繼承一下
有一個關鍵理解,就是 UnLua 并不是給所有 UClass 都找到對應的 Lua Class 去綁定,也不是 Lua Class 構造一個 UClass 去繼承被覆寫的藍圖類的 UClass,而是:
self
// BindObject,每個 Object 綁定一次,銷毀 UObject 時銷毀 LuaObject,不銷毀 UClass如果不希望 BP_B 綁定 Lua,步驟2 會返回 “BP_A.lua”
如果希望 BP_B 綁定 Lua,步驟2 會返回 “BP_B.lua”,而 BP_B LuaClass 在 Lua 中繼承了 BP_A LuaClass
---@class BP_A
local M = UnLua.Class()
-- ...
---@class BP_B
local M = UnLua.Class("BP_A")
-- ...
代碼實例ALS_Base_CharacterBP_C
基類ALS_AnimMan_CharacterBP_C
派生類---@type ALS_AnimMan_CharacterBP_C
local M = UnLua.Class("Game.AdvancedLocomotionV4.Blueprints.CharacterLogic.ALS_Base_CharacterBP") -- 繼承 Lua 基類
function M:GetRollAnimation()
print("GetRollAnimation")
self.Super.GetRollAnimation(self) -- 只會調用 Lua 基類實現,Lua 基類沒有實現 則 self.Super.GetRollAnimation is nil
self.Overridden.GetRollAnimation(self) -- 調用 派生類藍圖實現,Lua實現 覆寫了 藍圖實現,藍圖的函數指針存在 self.Overridden 里
local ReturnValue
ReturnValue = nil
return ReturnValue
end
return M
---@type ALS_Base_CharacterBP_C
local M = UnLua.Class()
function M:GetRollAnimation()
print("GetRollAnimation")
-- 基類 沒有 Super
self.Overridden.GetRollAnimation(self) -- 派生類實例,Lua 基類里 self.Overridden 還是會調用 派生類藍圖 實現,不符合用意,這么用是錯的
local ReturnValue
ReturnValue = nil
return ReturnValue
end
return M
結論你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
當前文章:【UnLua】Super繼承和override-創新互聯
網站地址:http://m.newbst.com/article32/depgsc.html
成都網站建設公司_創新互聯,為您提供外貿建站、外貿網站建設、品牌網站設計、電子商務、Google、網站改版
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯