物品/生物/人物,在游戲中都統(tǒng)稱為prefab粘衬,下文用prefab指代這些東西
本文介紹如何使用Mod API來安全地修改游戲中的prefab的屬性荞估。
相比直接修改游戲文件,通過制作MOD的方式進行修改雖然麻煩了一點稚新,但卻是一種安全的勘伺,對用戶友好的修改方式。 掌握修改屬性的方法褂删,能夠制作出更為穩(wěn)定的復(fù)雜MOD飞醉。官方提供的修改API十分強大,你對一個prefab或component了解得越全面屯阀,能做出的修改就越多缅帘。
進行修改之前,需要了解什么是prefab和component,如果你不了解难衰,可以參考我這篇文章
用到的Mod API
- AddPrefabPostInit
- AddComponentPostInit
修改單個prefab的屬性
本文舉例钦无,修改長矛的攻擊力為50,wilson的血量為300盖袭。
要想完成更復(fù)雜的修改失暂,你需要去看一個prefab或component的具體代碼,了解它的工作原理苍凛,然后才能進行修改趣席。
修改單個prefab,一般使用Mod API里的AddPrefabPostInit來完成醇蝴,它會接收一個函數(shù)宣肚,函數(shù)的傳入?yún)?shù)是prefab本身。然后可以在這個prefab的范圍內(nèi)隨意進行修改悠栓。
流程
- 查詢要修改的prefab名
- 了解屬性的對應(yīng)代碼
- 編寫修改代碼
查詢prefab名
首先你需要查詢prefab名霉涨,也就是常說的控制臺代碼,請根據(jù)需要自行百度惭适。
長矛的prefab名為 spear
威爾遜的prefab名為 wilson
了解屬性代碼
一般來說笙瑟,只要根據(jù)查詢到的prefab名直接去看prefab文件里的fn函數(shù)中的內(nèi)容就行了。只有人物稍微特殊癞志,使用了統(tǒng)一的基本模板往枷。所以要修改基本屬性應(yīng)該看player_common,看人物的特殊屬性才是看它的prefab文件。
設(shè)置長矛攻擊力的代碼為
inst.components.weapon:SetDamage(TUNING.SPEAR_DAMAGE)
設(shè)置wilson血量上限的代碼為
inst.components.health:SetMaxHealth(TUNING.WILSON_HEALTH)
編寫修改代碼
把以下的代碼寫到modmain.lua里错洁,即可完成修改秉宿。
-- 修改長矛攻擊力
local function modispear(inst)
inst.components.weapon:SetDamage(50)
end
AddPrefabPostInit("spear",modispear)
-- 修改wilson血量
local function modiwilson(inst)
inst.components.health:SetMaxHealth(300)
end
AddPrefabPostInit("wilson",modiwilson)
如此就完成了修改,在
修改一類屬性
有時候我們希望修改整一類的屬性屯碴,比如血量變化全部翻倍描睦,這時候想要試圖去修改單個prefab,就十分費力导而。幾乎所有的屬性都是用組件來實現(xiàn)的忱叭,所以我們可以修改組件。
對應(yīng)的Mod API是AddComponentPostInit今艺,和AddPrefabPostInit相似韵丑,傳入的第一個參數(shù)是component名,第二個參數(shù)是修改函數(shù)洼滚,函數(shù)的參數(shù)是組件對象埂息。
下面展示如何實現(xiàn)血量變化翻倍
流程
- 查詢要修改的component名
- 了解想要修改的部分對應(yīng)的代碼
- 編寫修改代碼
查詢component名
在prefab 里找到相應(yīng)的component,血量的component是health
了解代碼
打開health組件遥巴,找到血量變化的函數(shù)千康,是DoDelta,所以只要重定義DoDelta函數(shù)即可铲掐。
完成修改
把以下的代碼寫到modmain.lua里拾弃,即可完成修改。
local function DoubleHealthDelta(self)
local original_dodelta = self.DoDelta
self.DoDelta = function(self, amount, overtime, cause, ignore_invincible)
local double_amount = amount*2
original_dodelta(self, double_amount, overtime, cause, ignore_invincible)
end
end
AddComponentPostInit("health", DoubleHealthDelta)
現(xiàn)在加上前面修改長矛攻擊力的那段代碼摆霉,你可以用長矛一次砍死蜘蛛了豪椿。