类指南
关于类你需要了解的一切
nanos world 中的所有实体都由一个类来表示。 在 Lua 中,类由表表示。 这意味着与实体(Player、Character、Prop 等)的所有交互都是通过遵循 OOP (面向对象编程) 模式的类/表方法进行的。 本页面将对此进行详细解释。
在 nanos world 中,我们有 3 种类型的类(或结构):Classes(类)、Static Classes(静态类)和 Utility Classes(工具类)。
类
如果你阅读过我们的 快速入门 指南,你会注意到我们生成实体的格式如下:
-- 使用构造函数生成实体
local my_entity = Entity()
-- 使用其方法与实体进行交互
my_entity:MyFunction()
对 实体 / 已生成对象 的 方法 访问是通过 : 实现的。
这就是 OOP 的工作原理! 你创建对象,并在该对象上调用函数或捕获事件。 与其他拥有大量全局函数和事件来与实体交互的脚本游戏不同,nanos world 脚本是对 现代编程 的一种 现代实现方式。
基类
在底层,nanos world 的类遵循 继承模式,这意味着我们拥有基础父类,而其子类会“继承”它们的所有函数、事件和属性。 你会注意到,世界上所有可以生成的类都是 Base Actor,例如在 Character 和 Prop 中,可以调用以下函数::SetLocation()。
Base Actor 是 nanos world 中一个非常重要的类。 它包含了我们所有类中共享的大部分方法,还包含了直接获取和检索实体的 静态方法。
生成实体
在 nanos world 中生成实体非常简单直接,假设我们要生成一个 Character:
local my_character = Character()
每个类都将包含它自己的 构造函数、属性、方法 和 事件。
请在侧边栏的 SCRIPTING REFERENCE -> Classes 项中查看 nanos world 提供的所有类。
请记住,某些类只能在 服务器端(Server) 生成,而另一些类只能在 客户端(Client) 生成。
销毁实体
除了 Player 之外,所有类都允许你使用 :Destroy() 方法来销毁它们:
my_character:Destroy()
销毁实体将触发 Destroy 事件,并且还会自动分离所有通过 :AttachTo()¹ 附加到它的实体。
¹如果你在附加实体时将 lifespan_when_detached 参数设置为了 -1 以外的值,那么所有附加的实体也将会被销毁 😉。
静态类
nanos world 中的静态类是无法被生成的类。 相反,你可以直接使用 . 来调用它的方法。
例如,如果你想与太阳/天空/天气进行交互,你将需要 Sky 静态类:
-- 将时间设置为上午 9:25
Sky.SetTimeOfDay(9, 25)
对 静态类 / 静态方法 的访问是通过 . 实现的。
工具类
除了类和静态类之外,我们还有 工具类! 这些主要是 nanos world API 中使用的结构体,例如 Vector、Rotator、Color、JSON 等。
所有工具类均已在 https://github.com/nanos-world/nanos-world-lua-lib 开源。 欢迎随时提交合并请求(Merge Request)并提出修改建议!