饥荒Mod 开发(六):基础知识总结

饥荒Mod 开发(五):制作一个烹饪锅食物
饥荒Mod 开发(七):调试技巧

在前五篇文章大致介绍了一个Mod 的结构,一些基础概念已经如何创建一个简单的物品。 之前并没有说到太多的细节,主要是一开始就说细节的话太枯燥了,没有成就感,先按照文章做出一个物品来,也会很有成就感,那这里就针对之前的代码做一些细节的说明。

预制物

饥荒中的物品都是预制物的一个实例,这就好比是类和对象的关系。 预制物可以看成是一个类, 物品则是这个类实例化的各个对象。
一种类型的预制物只有一个,但是实体可以有很多个。 比如游戏中的树枝,草,猪人等, 他们各自都对应着一个预制物,但是却是不同的实体。所以我们制作物品其实是在制作预制物(定义一个类),然后由饥荒创建 预制物的实体。饥荒中有一个Prefab类,所有的预制物都是Prefab的对象。

require("class") -- 引入 "class" 模块,用于创建类

-- Prefab 类的定义
Prefab = Class( function(self, name, fn, assets, deps)
    self.name = name or "" -- Prefab 的名称,如果没有提供,那么默认值为 ""
    self.path = name or nil -- Prefab 的路径,如果没有提供,那么默认值为 nil
    self.name = string.sub(name, string.find(name, "[^/]*$")) -- 从路径中提取 Prefab 的名称
    self.desc = "" -- Prefab 的描述,初始值为 ""
    self.fn = fn -- Prefab 的函数,用于创建 Prefab 的实例
    self.assets = assets or {
   } -- Prefab 的资源,如果没有提供,那么默认值为 {}
    self.deps = deps or {
   } -- Prefab 的依赖,如果没有提供,那么默认值为 {}
end)

-- Prefab 类的 __tostring 方法,用于将 Prefab 对象转换为字符串
function Prefab:__tostring()
    return string.format("Prefab %s - %s", self.name, self.desc) -- 返回 "Prefab 名称 - 描述" 的格式
end

-- Asset 类的定义
Asset = Class( function(self, type, file, param)
    self.type = type -- Asset 的类型
    self.file = file -- Asset 的路径
    self.param = param -- Asset 的参数
end)

Prefab 大部分只用到name, fn, assets 这三个参数。

  1. name. 全局唯一的名字,用来标识预制物的名称,不能相同。
  2. fn. 一个回调函数,当我们创建一个实例的时候,会调用这个回调函数,我们会在这个回调函数中创建实体,添加组件,设置AI, 状态图等等。
  3. assets. 需要使用的资源,实例基本都会需要资源,最简单就是一个贴图和一个动画。

fn 函数

fn 函数有固定的格式,也是创建实例的必须函数,我们可以简单分为几个步骤

  1. 创建实体.
  2. 添加 饥荒引擎底层组件,这部分组件是没有lua源码的,仅仅是有一些封装好的接口调用
  3. 设置动画,一般这个是设置空闲时的动画,比如 物品放在地上的时候
  4. 设置tag. tag 主要对实例进行分类。比如怪物类,可放入冰箱,可保鲜等等。也可以不设置,并不是必须的
  5. 设置状态图和AI。 对于生物,角色 会设置,一般的普通物品不需要设置
  6. 添加普通组件。设置组件的属性等。 这部分组件提供lua源码
  7. 其余杂项,比如事件的监听, 加载保存数据等等
    下面是长矛的fn函数。

local function fn(Sim)
    --第一步 创建实体
	local inst = CreateEntity()
	--第二步 添加引擎底层组件,系统引擎底层组件使用 inst.entity:AddXXXX 添加
	
  • 67
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值