饥荒Mod 开发(二):Mod目录结构
饥荒Mod 开发(四):制作一个物品
打包工具的介绍
饥荒Mod 开发最常用的资源有两个,一个是动画,一个贴图。这两种资源可以使用上面的工具自动完成,打包完了之后,工具会自动将动画拷贝到对应的目录下。如果是要制作动画需要先试用 工具包中 Spriter 制作,然后用工具一键打包。下图是工具包的目录结构
工具包中打包另外两个工具,一个是 Spriter,制作动画专用。 一个是Textool 1.4.1,反解纹理工具。
工具使用
- autocompiler.exe 使用。autocompiler.exe 会自动枚举images 目录下的png图片,转换成纹理。需要注意PNG 图片最好是32位,也就是带alpha 通道的,并且图片的尺寸有一定限制,物品栏和制作栏 64*64。工具可以打包png图片和动画,无论是动画还是图片,只需要执行一次命令就可以,会自动将图片和动画一起打包好。先介绍下png图片
-
先将PNG 图片放入images/inventoryimages 目录下
-
打开命令行工具,可以使用vs code 更方便。
# 先cd到自己Mod 目录 cd 'D:\WeGameApps\rail_apps\饥荒:单机版(2000013)\mods\pigpet' # 执行命令行工具, 可以直接将exe 拖入进去 & 'h:\Don''t Starve Mod Tools\ds_mod_tools\build\win32\mod_tools\autocompiler.exe' 'D:\WeGameApps\rail_apps\饥荒:单机版(2000013)\mods\pigpet'
-
最终结果如下图 ,打包工具会自动生成 tex和xml文件。发布的时候原始的PNG 图片可以删掉不需要了。后面会介绍这些资源如何使用。
-
local function fn(Sim)
local inst = common()
inst.AnimState:SetBank("pigpetfood")
inst.AnimState:SetBuild("pigpetfood")
inst.AnimState:PlayAnimation("idle")
inst.components.edible.healthvalue = 20
--物品栏贴图
inst.components.inventoryitem.atlasname = "images/inventoryimages/pigpetfood.xml"
inst:AddComponent("tradable")
return inst
end
local pigpetfood
if GLOBAL.IsDLCEnabled(GLOBAL.CAPY_DLC) or GLOBAL.IsDLCEnabled(GLOBAL.PORKLAND_DLC) then
pigpetfood = GLOBAL.Recipe("pigpetfood", {GLOBAL.Ingredient("cutgrass", 10), GLOBAL.Ingredient("twigs", 10)}, GLOBAL.RECIPETABS.SURVIVAL, GLOBAL.TECH.NONE, nil, nil, nil, nil, 10)
else
pigpetfood = GLOBAL.Recipe("pigpetfood", {GLOBAL.Ingredient("cutgrass", 10), GLOBAL.Ingredient("twigs", 10)}, GLOBAL.RECIPETABS.SURVIVAL, GLOBAL.TECH.NONE, nil, 10)
end
--制作栏贴图
pigpetfood.atlas = "images/inventoryimages/pigpetfood.xml"
- 动画工具使用,Sprite 使用
- 我们给每个物品建一个目录,然后这个目录下就放 和该物品相关的动画资源文件。比如我们需要给pigpetfood 做一个动画,那就在exported 目录下新建一个pigpetfood 目录就可以。双击打开工具, 选择 File->New Project, 会提示选择目录的时候就选择这个目录。
- 在这个目录下再新建一个 同名的目录,放原始资源文件。
工具右侧的截图如下
- 右侧面板中,将图片拖入到到中间区域,然后修改一些动画名字。下图右侧的红框和绿框中名字分别对应代码,操作完之后保存工程。
- 我们给每个物品建一个目录,然后这个目录下就放 和该物品相关的动画资源文件。比如我们需要给pigpetfood 做一个动画,那就在exported 目录下新建一个pigpetfood 目录就可以。双击打开工具, 选择 File->New Project, 会提示选择目录的时候就选择这个目录。
local function fn(Sim)
local inst = common()
--红框中的名字
inst.AnimState:SetBank("pigpetfood")
--工程保存的scml文件的名字
inst.AnimState:SetBuild("pigpetfood")
--绿框中的名字
inst.AnimState:PlayAnimation("idle")
inst.components.edible.healthvalue = 20
inst.components.inventoryitem.atlasname = "images/inventoryimages/pigpetfood.xml"
inst:AddComponent("tradable")
return in
保存文件名,和 物品的名字一样
上面有很多东西没有介绍,目前不需要关注这些,只需要记住这个工具的简单使用,随着深入学习会逐步了解这些。总结一下这里
- 每个动画工程可以保存一个 scml 文件,文件名是物品名字一致。对应 inst.AnimState:SetBuild(“pigpetfood”)
- 工程红框部分(Entity) 名字 对应 inst.AnimState:SetBank(“pigpetfood”)。一个Entity 可以包含多个动画。
- 绿框部分(动画名) 对应 inst.AnimState:PlayAnimation(“idle”)。
- 以上完成之后执行编译脚本, 和纹理的脚本是一样的,可以看上面的介绍。最后会打包动画文件。
这个exported 目录也是临时目录,发布的时候并不需要,真的动画文件会被自动拷贝到动画目录.下图就是自动拷贝目标目录