1、游戏里看到的可以有格子装东西的都算容器。由容器预制物、容器UI组成,
2、容器注意事项:
容器预制物的名字(Prefab代码)需要和UI名字(container:WidgetSetup())
(params.xxx)三个地方的名字一样,否则会报错如下
"scripts/widgets/containerwidget.lua"]:29: attempt to index local 'widget' (a nil value),
如果不一样,则需要在容器内重新加载UI。代码如下(下面示例代码是没有物品贴图的)
local assets = {
Asset("ANIM", "anim/misaka_world_ui_container_4x4.zip"),
}
local function fn()
local inst = CreateEntity()
inst.entity:AddTransform()
inst.entity:AddAnimState()
inst.entity:AddNetwork()
inst:AddTag("NOBLOCK")
inst:AddTag("NOCLICK")
inst:AddTag("misaka_world_sisters_containers_4x4")
inst.entity:SetPristine()
--重要注释:WidgetSetup那个UI的名字要和容器预制物的代码名字一样,
-- 否则就需要加OnEntityReplicated这段,重新在预制体内注册容器。
if not TheWorld.ismastersim then
inst.OnEntityReplicated = function(inst)
inst.replica.container:WidgetSetup("misaka_world_sisters_containers_4x4")
end
return inst
end
inst:AddComponent("inventoryitem") -- 物品组件
-- inst.components.inventoryitem.imagename = "misaka_world_firesword"
-- 这个名字是必须的,否则会出现物品栏没有贴图的情况,
-- 如果这个贴图只有一个物品使用,不写也可以,但是如果有两个以上的用就必须写。
-- inst.components.inventoryitem.atlasname =
-- "images/inventoryimages/misaka_world_firesword.xml" -- 物品贴图
inst:AddComponent("container")
inst.components.container:WidgetSetup("misaka_world_sisters_containers_4x4")
return inst
end
return Prefab("misaka_world_sisters_storage_space", fn, assets)