摘要
在本节中,您将找到所有特定于《桌面模拟器》的Lua脚本的事件/类/函数的详细信息。关于Lua脚本语言如何工作以及它自己能做什么,您可以查看Lua官方文档。
使用API文档
左栏
这是在《桌面模拟器》中用Lua编写脚本时所需的类和其他信息的顶级列表。事件(Event), 根基(Base)和对象(Object)是你使用最多的三个页面,其余的都是你可以访问的小众信息。熟悉这三页的内容有助于从高层次上理解脚本编写能够做什么。
右栏
目录将展示你所在页面的内容。它总是首先从高级摘要信息开始,如果需要,则从底部开始详细信息。!符号后的总结元素将直接将您带到下面的相关详细解释。
完善文档
这个文档主要是用Markdown编写的,可以在Github上找到。
如果你遇到了一个错误,而这是你自己能够修复的,那么欢迎拉取请求。但是,如果您已经发现了一个问题,但不知道如何解决它,请通过打开一个问题让我们知道。
TTS术语
对象 Object
当前存在于场景中的游戏物理对象。如果一个对象被放置在包/牌组/等中,它将不再存在,直到它被拉出。
玩家 Player
一个人在游戏。每个玩家被分配一个颜色,观众是“灰色”。如果你想要识别一个玩家,你可以使用他们所处位置的颜色。
全局脚本 Global Scripts
每个游戏/保存都有一个全局脚本,它不附加到任何特定的对象。
只有一个全局脚本,并且它总是存在的。
对象脚本 Object Scripts
每个游戏中的对象也可能有一个脚本附加到它。
默认情况下,新创建的对象没有附加脚本。但是,你可以从对象(Object)的上下文菜单中选择create/edit 该对象的脚本(通常通过右键单击对象打开)。
GUID
在《桌面模拟器》中,GUID是一个唯一的6个字符的字符串,可以用来识别游戏中的对象。当场景中存在对象时,该对象会自动分配到一个GUID。
如果一个对象被复制,在引擎给新的对象分配一个新的GUID之前,它有时会有1帧相同的GUID。容器中的对象(包/牌组/等)不会通过这种方式自动获得新的GUID。只有当他们的东西被移到现场时才会。
弃用的API
在本文档中,您可能会遇到Lua API,它们被标记为 deprecated 。建议您不要再使用已弃用的API。通常,这是因为引入了更新或改进的API,它们可以更好地服务于相同的目的。
弃用的API不会被移除或停止工作。
现有的Mod可以继续使用被弃用的功能。无论如何,强烈建议为了获得最佳体验,在新代码中避免使用已弃用的API。
数据类型
类型(Types)是指所使用的信息的类型。您不需要在Lua中声明类型,但是在这个API中您将看到它们的指示。这只是为了让您知道在给定的变量/参数中需要什么样的信息。这个API利用以下类型。
通用标准
标签 | Type | Description | Example |
---|---|---|---|
nil | nil | 空值 | nil |
int | int | 整性数 | 5 |
float | float | 浮点数 | 2.032 |
bool | bool | 布尔值 | true |
string | string | 字符串 | "Hello." |
table | table | 表,一种键值对集合 | {["key"]="value", true, 5} |
vector | vector | 矢量,向量 | |
color | color | 颜色 | |
function | function | 函数 | |
object | object | 对象 | Global or self |
player | player | 游戏中的玩家 | Player["White"] |
variable | variable | 其他类型的组合。 |
更多信息见下文。
有关类型的更多信息,可以阅读下面的内容或参考相关的Lua文档。
特殊标准
有些类型需要以特定的方式使用。对于Vector和Color,它们是在《桌游模拟器》中经常使用的表格Table。它们表示颜色和矢量,它们的内容必须以某种方式进行格式化才能正确使用。
对于函数,当运行中的脚本有特定的要求时需要延迟时,就会使用函数。
颜色 Color
Color是Table的一种类型,用于定义着色的RGB值。
您可以使用Color类来操作颜色。
键
表中包含r,g,b,a和/或1,2,3,4 。字母键和数字键相互重复,每个键代表一种颜色或透明度。
颜色 Color | 字母键 | 数字键 |
---|---|---|
红色 red | r | 1 |
绿色 green | g | 2 |
蓝色 blue | b | 3 |
透明度 alpha | a | 4 |
例如,一个带有白色色调的Object会返回这个表:
{
r=1, g=1, b=1,
1=1, 2=1, 3=1,
}
注意,它不包含a或4键。这是因为目前只有脚本按钮和脚本输入使用alpha通道(透明度)。
混合键
只需要一种类型的键,数字或字母。如果两种都出现在Table中,则忽略数字键,只使用字母键。
--红色
{r=1, g=0, b=0}
--蓝色
{0, 0, 1}
--这个表表示红色
{r=1, g=0, b=0, 0, 0, 1}
值
每个键的值在0到1之间。如果您使用的是0-255的RGB颜色,您可以使用简单的数学转换为适当的值。
--显示一种颜色 r=50, b=83, g=199
self.setColorTint({50/255, 83/255, 199/255})
字符串
你也可以用一个字符串来代替颜色表。使用玩家颜色将自动填充该值。它适用于12种颜色名称中的任何一种,因为它们写在玩家颜色页面上。
例如:
printToAll("Test", "Green")
向量 Vector
Vector是一种带有x、y和z坐标的对象类型,用于定义位置、旋转或方向。
您可以使用Vector类来操作向量。
例如:
target = Vector(1, 0, 0) + Vector(0, 2, 0):normalized()
键
表将包含键x, y, z和/或1,2,3。字母键和数字键相同。
字母键 | 数字键 |
---|---|
x | 1 |
y | 2 |
z | 3 |
例如,在坐标X=5, Y=2, Z=-1处的一个对象将返回这个向量:
{
x=5, y=2, z=-1,
}
混合键
在引入Vector之前,坐标表包含1、2、3和x、y、z键下的单独值,字母键不同时优先。现在情况不再是这样了,使用字母和数字键是等价的。然而,当迭代Vector组件时,您必须使用pairs,并且只读取字母键。
值范围
值的范围取决于您使用的Vector类型。
类型 | 描述 | 范围 |
---|---|---|
Position | 空间中的点 | 世界范围内的任何数字。 |
Rotation | 角,单位度 ° | -180 to 180. |
Direction | 向量的方向。 | -1 to 1. |
类型细节
Position
X是右/左,Y是上/下,Z是前/后。位置向量可以是世界向量,也可以是局部向量。TTS中大多数的函数使用世界位置向量。
类型 | 描述 |
---|---|
世界 World | 实例的中心是{x=0, y=0, z=0}。那通常是靠近桌面的中心。 |
局部 Local | 对象模型的中心是{x=0, y=0, z=0}。对象的中心是由模型的创建者决定的。 |
世界与局部坐标的转换
positionToWorld(...) 和 positionToLocal(...) 被用来转换两种坐标
Rotation
X是俯仰(点头),Y是偏航(摇头),Z是滚转(头部倾斜)。
Direction
X是右/左,Y是上/下,Z是前/后。
函数 Function
函数(Function)是一段可以在触发时运行的代码。在Lua中,您可以传递(作为参数使用)函数。TTS中的一些元素可以通过传递函数来执行某些操作,比如在延迟后触发它。
用法
要传递一个函数,首先必须创建这个函数。有多种方法可以做到这一点:
--动态创建它
function() print("Like This") end
--用变量名创建它
anyFuncName = function() print("Like This") end
--用变量名创建它,该变量名还可以传递参数
function anyFuncName(printString)
print(printString)
end
你需要传递一个函数,而不是一个函数的结果。所以这是行不通的:
相反,让打印函数运行的结果:Wait.frames(print("Ding"), 80)
Wait.frames(function() print("Ding") end, 80)
示例
例如,这里的Wait.frames(…)被使用了3次。它等待一组帧,然后激活一个给定的函数:
function onLoad()
--带有参数的内置函数可以直接调用
--这是通过将函数封装在' function() '和' end '中来实现的。
Wait.frames(function() print("One") end, 60)
--你还可以调用你自己创建的自定义函数
--向它们传递你希望的任何参数
Wait.frames(function() sayTwo("Two") end, 120)
--如果你没有传递任何参数给函数,你可以缩短它
Wait.frames(sayThree, 180)
end
--它的参数传递给它了吗
function sayTwo(s) print(s) end
--没有任何参数传递给它
function sayThree() print("Three") end
事件
游戏通常需要执行代码以响应游戏中发生的某些行动、互动或变化,统称为事件。
事件处理程序
事件处理程序是您定义并由TTS调用的函数。
可以定义许多事件处理程序。每一个都为您提供了处理特定事件发生的机会。
当TTS调用你的函数,它将提供事件特定的细节作为你的事件处理函数的参数。
为了让TTS发现事件处理程序,必须将其定义为具有特定名称的全局变量。您使用的名称取决于您希望处理的事件。下面将介绍特定于事件的细节。
而事件处理程序名称只对应于一种类型的事件。每个事件可能有多个对应的事件处理程序(即事件处理程序名称),TTS将查找和执行。
事件处理程序有三种类型:
- 通用事件处理程序
- 全局事件处理程序
- 对象事件处理程序
通用事件处理程序
通用事件处理程序可以在全局脚本和/或对象脚本中定义。
全局事件处理程序
全局事件处理程序只能在全局脚本中定义。
如果在对象脚本中使用全局事件处理程序的名称定义函数。它不会被调用。
对象事件处理程序
对象事件处理程序只能在对象脚本中定义。
如果您在全局脚本中使用对象事件处理程序的名称定义函数。它不会被调用。
事件处理程序执行
通常,如果一个事件有多个事件处理程序,例如在对象脚本、全局脚本和/或多个对象脚本中,那么所有这些事件处理程序都将被执行。
一些事件处理程序允许您返回一个值来触发可选的副作用。例如,从"try"事件处理程序返回false将阻止正在尝试的任何操作。如果返回触发可选副作用的值,则将不会执行后续事件处理程序(针对同一事件发生)。
事件汇总
通用事件处理程序
如上所述,您可以在全局脚本或对象脚本中声明这些函数。
函数名称 | 描述 |
---|---|
onBlindfold(player player, bool blindfolded) | 当玩家带上或摘下他们的眼罩时调用。 |
onChat(string message, player sender) | 当用户发送游戏内聊天消息时调用。 |
onExternalMessage(table data) | 当通过外部编辑器API从外部进程接收到自定义消息时调用。 |
onFixedUpdate() | 每一次物理周期调用(每秒90次)。这是一个与帧无关的onUpdate()函数。 |
onLoad(string script_state) | 当保存已经完全完成加载时调用。 |
onObjectCollisionEnter(object registered_object, table collision_info) | 当一个对象开始与注册碰撞事件的对象发生碰撞时调用。 |
onObjectCollisionExit(object registered_object, table collision_info) | 当一个对象与注册碰撞事件的对象停止碰撞时调用。 |
onObjectCollisionStay(object registered_object, table collision_info) | 一个对象与注册碰撞事件的对象碰撞的每一帧都会调用。 |
onObjectDestroy(object object) | 当一个对象即将被销毁时调用。 |
onObjectDrop(string player_color, object object) | 当一个对象被玩家丢弃时调用。 |
onObjectEnterContainer(object container, object object) | 对象进入容器时调用。包括牌组 |
onObjectEnterScriptingZone(object zone, object object) | deprecated 请使用onObjectEnterZone(…)。 当对象进入脚本区域时调用。 |
onObjectEnterZone(object zone, object object) | 当对象进入一个区域时调用。 |
onObjectFlick(object object, string player_color, vector impulse) | 当玩家轻弹一个对象时调用。 |
onObjectHover(string player_color, object object) | 当对象被玩家的指针(光标)悬停时调用。 |
onObjectLeaveContainer(object container, object object) | 当对象离开容器时调用。 |
onObjectLeaveScriptingZone(object zone, object object) | deprecated 请使用onObjectLeaveZone(…)。 当对象离开脚本区时调用。 |
onObjectLeaveZone(object zone, object object) | 当对象离开某个区域时调用。 |
onObjectLoopingEffect(object object, int index) | 每当激活AssetBundle的循环效果时调用。 |
onObjectNumberTyped(object object, string player_color, int number) | 当玩家在一个物体上悬停时键入一个数字时调用。 |
onObjectPageChange(object object) | 当自定义PDF对象更改页面时调用。 |
onObjectPeek(object object, string player_color) | 当玩家窥视一个对象时调用。 |
onObjectPickUp(string player_color, object object) | 当一个玩家拿起一个对象时调用。 |
onObjectRandomize(object object, string player_color) | 当对象被随机化时调用。就像洗牌或摇骰子。 |
onObjectRotate(object object, float spin, float flip, string player_color, float old_spin, float old_flip) | 当玩家旋转一个对象时调用。 |
onObjectSearchEnd(object object, string player_color) | 在容器上完成搜索时调用。 |
onObjectSearchStart(object object, string player_color) | 在容器上开始搜索时调用。 |
onObjectSpawn(object object) | 当派生/创建对象时调用。 |
onObjectStateChange(object object, string old_state_guid) | 对象改变状态后调用。 |
onObjectTriggerEffect(object object,int index) | 当AssetBundle的触发效果被激活时调用。 |
onPlayerAction(player player, Action action, table targets) | 当玩家试图执行一个动作时调用。 |
onPlayerChangeColor(string player_color) | 当玩家改变颜色或第一次选择时调用。如果他们断开连接,它就返回“Grey”。 |
onPlayerChangeTeam(string player_color, string team) | 当玩家更换队伍时调用 |
onPlayerConnect(player player) | 当玩家连接到游戏时调用。 |
onPlayerDisconnect(player player) | 当玩家从游戏断开连接时调用。 |
onPlayerPing(player player, vector position) | 当玩家ping一个位置时调用。 |
onPlayerTurn(player player, player previous_player) | 在玩家回合开始时调用。 |
onSave() | 当脚本需要保存其状态时调用。 |
onScriptingButtonDown(int index, string player_color) | 当按下脚本按钮(默认为整个小键盘的任意键)时调用。返回的索引范围为1 ~ 10。 |
onScriptingButtonUp(int index, string player_color) | 当一个脚本按钮(默认为整个小键盘的任意键)被释放时调用。返回的索引范围为1 ~ 10。 |
onUpdate() | 每一帧。 |
全局事件处理程序
如上所述,您可以在Global脚本中声明这些函数。
函数名 | 描述 |
---|---|
filterObjectEnterContainer(object container, object object) | deprecated 请使用tryObjectEnterContainer(…)。 当对象试图进入容器时调用。 |
onZoneGroupSort(object zone, table group, bool reversed) | 当需要对一组由布局区域进行布局的对象进行排序时调用。 |
tryObjectEnterContainer(object container, object object) | 当对象试图进入容器时调用。 |
tryObjectRandomize(object object, string player_color) | 当玩家尝试随机化一个对象时调用。 |
tryObjectRotate(object object, float spin, float flip, string player_color, float old_spin, float old_flip) | 当玩家试图旋转一个物体时调用。 |
对象事件处理程序
如上所述,你可以在对象脚本中声明这些函数。
这些事件属于脚本所有者-对象(在脚本中可用self访问)。
它们不能在全局脚本中声明这些事件处理程序。
函数名 | 描述 |
---|---|
filterObjectEnter(object object) | deprecated 请使用tryObjectEnter(…)。 当对象试图输入脚本所有者object(容器)时调用。 |
onCollisionEnter(table collision_info) | 当一个对象开始与脚本所有者对象发生碰撞时调用。 |
onCollisionExit(table collision_info) | 当一个对象停止与脚本所有者对象发生碰撞时调用。 |
onCollisionStay(table collision_info) | 一个对象与脚本所有者对象发生碰撞的每帧调用。 |
onDestroy() | 当玩家删除脚本所有者对象时调用。 |
onDrop(string player_color) | 当玩家使脚本所有者对象掉下时调用。 |
onFlick(string player_color, vector impulse) | 当玩家轻弹脚本所有者对象时调用。 |
onGroupSort(table group, bool reversed) | 当需要对一组由脚本所有者布局区域布局的对象进行排序时调用。 |
onHover(string player_color) | 当玩家将指针(光标)移到脚本所有者对象上时调用。 |
onNumberTyped(string player_color, int number) | 当玩家将鼠标悬停在脚本所有者对象上时输入数字时调用。 |
onPageChange() | 当脚本所有者自定义PDF的页面被更改时调用。 |
onPeek(string player_color) | 当玩家窥视脚本所有者对象时调用。 |
onPickUp(string player_color) | 当玩家拿起脚本所有者对象时调用。 |
onRandomize(string player_color) | 当脚本所有者对象被随机化时调用。就像洗牌或摇骰子。 |
onRotate(float spin, float flip, string player_color, float old_spin, float old_flip) | 当玩家旋转脚本所有者对象时调用。 |
onSearchEnd(string player_color) | 当玩家搜索完脚本所有者对象时调用。 |
onSearchStart(string player_color) | 当玩家开始搜索脚本所有者对象时调用。 |
onStateChange(string old_state_guid) | 当因对象状态更改而生成脚本所有者对象时调用。 |
tryObjectEnter(object object) | 当另一个对象试图进入脚本所有者对象(容器)时调用。 |
tryRandomize(string player_color) | 当玩家试图随机化脚本所有者对象时调用。 |
tryRotate(float spin, float flip, string player_color, float old_spin, float old_flip) | 当玩家试图旋转脚本所有者对象时调用。 |
细节略
基础
这些是一个松散的函数集合,可用于在TTS中执行各种操作。
这些功能可以利用游戏内的对象,但它们都不能在游戏内的对象上执行。它们都与游戏空间有关。
函数汇总
全局函数
在任何脚本中工作的通用函数。
函数名 | 描述 | 返回类型 |
---|---|---|
addContextMenuItem(string label, func toRunFunc, bool keep_open, bool require_table) | 将菜单项添加到全局右键单击上下文菜单中。全局菜单显示时,玩家右键单击空白空间或表。 | bool |
clearContextMenu() | 清除所有功能addContextMenuItem(…)添加的菜单项。 | bool |
copy(table object_list) | 复制对象列表到剪贴板。适用于paste(…)一起用。 | bool |
destroyObject(object obj) | 销毁一个对象。 | bool |
flipTable() | 掀桌子。 | bool |
getAllObjects() | deprecated 请使用getobject()。 返回包含游戏中除手牌区以外的所有物体的表格。 | table |
getObjectFromGUID(string guid) | 返回对象的GUID。如果这个GUID当前不存在,将返回nil。 | object |
getObjects() | 返回包含游戏中所有对象的表格。 | table |
getObjectsWithTag(string tag) | 返回包含带有指定标签的所有对象的表。 | table |
getObjectsWithAnyTags(table tags) | 返回包含至少一个指定标签的所有对象的表。 | table |
getObjectsWithAllTags(table tags) | 返回包含所有指定标签的所有对象的表。 | table |
getSeatedPlayers() | 返回包含所有座位上的玩家的颜色字符串表。 | table |
group(table objects) | 将对象组合在一起,就像G键对玩家的作用一样。 | table |
paste(table parameters) | 粘贴游戏中复制到剪贴板的对象。与copy(…)一起用。 | table |
setLookingForPlayers(bool lfp) | 启用/禁用查找组。这在服务器浏览器中是可见的,表明你是否在为游戏征募玩家。 | bool |
spawnObject(table parameters) | 生成一个对象。 | object |
spawnObjectData(table parameters) | 从数据表生成一个对象。 | object |
spawnObjectJSON(table parameters) | 从JSON字符串生成一个对象。 | object |
startLuaCoroutine(object function_owner,string function_name) | 启动一个协同程序。 | bool |
stringColorToRGB(string player_color) | 将玩家颜色字符串转换为颜色表进行着色。 | color |
热键函数
函数名 | 描述 | 返回类型 |
---|---|---|
addHotkey(string label, func toRunFunc, bool trigger_on_key_up) | 在游戏中添加一个可绑定的热键。 | bool |
clearHotkeys() | 清除所有以前通过addHotkey(…)添加的热键。 | bool |
showHotkeyConfig() | 显示热键配置窗口下的选项->游戏键。 | bool |
消息函数
处理发送和显示数据的函数。
函数名 | 描述 | 返回类型 |
---|---|---|
broadcastToAll(string message, color message_tint) | 打印屏幕上的信息给所有玩家,以及他们的游戏内聊天。 | bool |
broadcastToColor(string message, string player_color, message_tint) | 打印屏幕上的信息给指定的玩家,以及他们在游戏中的聊天。 | bool |
log(var value, string label, string tags) | 将消息记录到主机的系统控制台。(快捷键:~) | bool |
logString(var value, string label, string tags, bool concise, bool displayTag) | 返回一个类似于log(…)输出的格式化字符串。 | string |
logStyle(string tag, color tint, string prefix, string postfix) | 为日志的指定标记类型设置样式选项。 | bool |
print(string message) | 打印一个只有房主才能看到的聊天字符串。用于调试脚本。 | nil |
printToAll(string message, color message_tint) | 打印信息到所有连接的玩家的聊天。 | bool |
printToColor(string message, string player_color, color message_tint) | 打印信息到特定颜色的玩家。 | bool |
sendExternalMessage(table data) | 向外部脚本编辑器(最可能是Atom)发送一个表。这是为自定义编辑器功能。 | bool |
细节
对象
对象类表示桌面模拟器中的任何实体。一旦你在你的脚本中有了一个对象的引用,你就可以直接在它上面调用函数。例如:obj.getPosition(…)。你可以通过多种方式获取一个对象的引用;
- 如果你的脚本在一个对象上并引用那个对象,使用self属性。
- 使用getObjectFromGUID(…)对象的GUID(通过鼠标右键点击它找到)。
- 获取它作为另一个函数的返回值,就像使用spawnObject(…)。
成员变量
公共变量
这些变量对所有对象都是通用的。有些变量是只读的,这意味着您可以查询属性,但不能为其赋新值。
通过将true赋值给locked来锁定/冻结对象。
object.locked = true
打印对象是否是locked。
if object.locked then print("Object is locked") else print("Object is not locked") end
变量 | 描述类型 | Type |
---|---|---|
alt_view_angle | 当非零时,Alt视图将使用指定的欧拉角度来查看对象。 | vector |
angular_drag | 角阻力。 Unity刚体(Rigidbody)特性。 | float |
auto_raise | 在玩家手持该物体时,该物体应放在其他物体上方以避免碰撞。 | bool |
bounciness | 弹力,值为0~1。 Unity物理材质。 | float |
drag | 阻力。 Unity刚体(Rigidbody)特性。 | float |
drag_selectable | 当为false时,对象将不会被绘制在对象周围的常规(单击和拖动)选择框选中。 玩家可以在拖动选择的同时按住“Shift”修改器来覆盖这一行为。 | bool |
dynamic_friction | 动摩擦力, 值为 0~。Unity物理材质。 | float |
grid_projection | 如果已打开可见网格,则网格线可以显示在对象上。 | bool |
guid | 桌面模拟器中的6个字符唯一的对象标识符。一旦生成成员变量变为false,它就被正确地赋值 | string |
held_by_color | 持有该物体的玩家的颜色。 | string |
held_flip_index | 值为0~23。当玩家点击翻转或alt +旋转时改变。 | int |
held_position_offset | 距离指针的位置偏移量。 | vector |
held_reduce_force | 当物体在移动时与物体碰撞时,这将自动启用并减少移动力。 | bool |
held_rotation_offset | 从指针旋转偏移量。 | vector |
held_spin_index | 值为0~23。当玩家旋转物体时改变。 | int |
hide_when_face_down | 隐藏面朝下的对象,就像它在手区域一样。面是对象的“顶部”,它的正Y坐标的方向。卡牌/牌组默认为true。 | bool |
ignore_fog_of_war | 使对象不被战争迷雾隐藏。 | bool |
interactable | 如果对象可以与玩家互动。其他对象仍然能够与它交互。 | bool |
is_face_down | 如果对象大致面朝下(就像纸牌)。面是对象的“顶部”,它的正Y坐标的方向。只读。 | bool |
loading_custom | 如果对象的自定义元素(图像/模型/等)正在加载。只读。 | bool |
locked | 对象被冻结在原地(防止物理交互)。 | bool |
mass | 质量。 Unity刚体(Rigidbody)特性。 | float |
max_typed_number | 确定用户悬停在对象上时可输入的最大数字数。 一旦玩家输入了最大数字数,相应的行为(如onObjectNumberTyped/onNumberTyped)就会立即触发,提高响应性。 | int |
measure_movement | 当移动物体时,测量工具将自动被使用。 | bool |
memo | 一个字符串,您可以在其中保存与对象关联的用户数据。桌面模拟器保存此字段,但不使用它。存储任何你认为合适的信息。 | string |
name | 此对象的内部资源名称。只读,并且只对spawnObjectData()有用。通常,您需要getName()。 | string |
pick_up_position | 物体被拾取的坐标位置。只读。 | vector |
pick_up_rotation | 物体被拾取的旋转位置。只读。 | vector |
remainder | 如果这个对象是一个容器,它不能存在少于两个包含对象(例如,一个牌组),取出最后一个包含对象将导致容器被销毁。在它的位置上,容器中最后一个剩余的对象将被生成。 这个变量在派生时提供对剩余对象的引用。否则,它是零。只读。 | object |
resting | 对象处于静止状态。 Unity刚体(Rigidbody)特性。 | bool |
script_code | 对象上的Lua脚本。 | string |
script_state | 对象上保存的数据。见onSave()。 | string |
spawning | 对象完成生成。只读。 | bool |
static_friction | 静摩擦力,值为0~1. Unity物理材质。 | float |
sticky | 如果这个对象被选中,那么这个对象上的其他对象也被选中。 | bool |
tag | 已弃用。请使用 type。 这个对象的类型。只读。 | string |
tooltip | 当指针悬停在对象上时,工具提示打开。工具提示显示名称和描述。 | bool |
type | 这个对象的类型。只读的。 | string |
use_gravity | 重力是否影响这个物体。 | bool |
use_grid | 是否启用捕捉到网格。 | bool |
use_hands | 这个物体是否可以被握在手的区域。 | bool |
use_rotation_value_flip | 物体翻转时是否切换旋转的轴。 | bool |
use_snap_points | 使用或忽略接合点。 | bool |
value | 与该对象相关联的数值,当鼠标悬停在该对象上时,将显示该数值。 在堆栈的情况下,UI中显示的值将乘以堆栈大小,也就是说,你可以使用值来创建自定义堆叠芯片。 当选择多个对象时,值将与共享重叠对象标记的对象一起求和。 | int |
value_flags | 已弃用。请使用 object tags 一个位域。当具有重叠value_flags的对象被选中并悬停在其上时,它们的值将被求和。 | int |
行为变量
一些对象提供额外的行为。该功能可以作为Object成员变量访问,但将为nil,除非Object包含该行为。
“Counter”对象有一个Counter成员变量。我们将使用它来递增和检索计数器的值。
object.Counter.increment() print("The counter value is now " .. object.Counter.getValue())
变量 | 类型 | 有效对象 |
---|---|---|
AssetBundle | AssetBundle | 自定义“AssetBundle”对象。 |
Book | Book | "Custom PDF" 对象。 |
Browser | Browser | "Tablet" 对象。 |
Clock | Clock | "Digital Clock" 对象。 |
Counter | Counter | "Counter" 对象。 |
LayoutZone | LayoutZone | 布局区域。 |
RPGFigurine | RPGFigurine | "RPG Kit" 动画雕像对象,即类型"rpgFigurine". |
TextTool | TextTool | 3D Text 对象,例如使用游戏内文本工具创建的文本。 |
函数汇总
变换函数
这些函数处理对象的物理属性:位置、旋转、缩放、边界、速度。换句话说,移动物体以及获取物体如何移动的信息。
函数名 | 描述 | 返回类型 |
---|---|---|
addForce(vector vector, int force_type) | 在方向向量中向对象添加力。 | bool |
addTorque(vector vector, int force_type) | 在旋转向量中为物体增加扭矩。 | bool |
getAngularVelocity() | 返回当前角速度的向量。 | vector |
getBounds() | 返回一个以全局术语描述对象大小的Vector。 | vector |
getBoundsNormalized() | 返回一个以全局术语描述对象大小的Vector,就像它被旋转到{0,0,0}一样。 | vector |
getPosition() | 返回当前世界位置的Vector。 | vector |
getPositionSmooth() | 如果对象是平滑移动的,返回当前平滑移动目标的向量,否则返回nil。 | vector |
getRotation() | 返回当前旋转的向量。 | vector |
getRotationSmooth() | 如果对象是平滑移动的,返回当前平滑旋转目标的向量,否则返回nil。 | vector |
getScale() | 返回当前比例尺的向量。 | vector |
getTransformForward() | 返回该对象的正向向量。 | vector |
getTransformRight() | 返回该对象的向右向量。 | vector |
getTransformUp() | 返回该对象的向上向量。 | vector |
getVelocity() | 返回当前速度的向量。 | vector |
isSmoothMoving() | 指示一个物体是否作为平滑移动的一部分移动。平滑移动由setPositionSmooth和setRotationSmooth执行。 | bool |
positionToLocal(vector vector) | 在将世界向量(世界位置)转换为局部向量(局部位置)后返回一个向量。 | vector |
positionToWorld(vector vector) | 在将局部向量(局部位置)转换为世界向量(世界位置)后返回一个向量。 | vector |
rotate(vector vector) | 在给定向量的方向上平滑地旋转对象。 | bool |
scale(vector vector or float) | 将对象缩放倍数。 | bool |
setAngularVelocity(vector vector) | 设置一个向量为当前的角速度。 | bool |
setPosition(vector vector) | 立即移动一个对象到给定的世界位置。 | bool |
setPositionSmooth(vector vector, bool collide, bool fast) | 将对象平滑移动到给定的世界位置。 | bool |
setRotation(vector vector) | 立即旋转一个对象到给定的向量。 | bool |
setRotationSmooth(vector vector, bool collide, bool fast) | 将对象平滑地旋转到给定的向量。 | bool |
setScale(vector vector) | 设置一个向量为当前比例。 | bool |
setVelocity(vector vector) | 设置一个向量作为当前的速度。 | bool |
translate(vector vector) | 通过给定的向量偏移量平滑移动对象。 |
标签函数
这些函数处理与对象相关联的标记。单个标签是一组字符串,不区分大小写。
函数名 | 描述 | 返回类型 |
---|---|---|
addTag(string tag) | 将指定的标记添加到对象。 | bool |
getTags() | 返回已添加到对象的标签(string)表。 | table |
hasAnyTag() | 返回对象是否有标签。 | bool |
hasMatchingTag(table other) | 返回该对象和指定的其他对象是否共享至少一个共同标签。 | bool |
hasTag(string tag) | 返回对象是否具有指定的标签。 | bool |
removeTag(string tag) | 从对象中移除指定的标签。 | bool |
setTags(table tags) | 将对象上的所有标签替换为指定表(包含string)中包含的标签。 |
如果你想创建自己的系统,其中对象标签控制交互,规范的逻辑是,如果系统没有标签,它与所有东西交互,但如果它有任何标签,那么它只与共享其中一个的对象交互。例如(假设系统是由游戏内的对象所代表):
allow_interaction = not system.hasAnyTag() or system.hasMatchingTag(object)
UI函数
一个新的UI系统被添加到桌面模拟器,它允许在对象上创建更灵活的UI元素。旧系统(经典UI)和新系统(自定义UI)都可以工作,而且各自有自己的优势。
经典UI
这些函数允许创建/编辑/删除功能按钮和文本输入,这些按钮和文本输入本身会触发脚本中的代码。这些按钮/输入附加到创建它们的对象上。
Function Name | Description | Return |
---|---|---|
clearButtons() | 删除所有脚本按钮。 | bool |
clearInputs() | 删除所有脚本输入。 | bool |
createButton(table parameters) | 创建附加到对象的脚本按钮。 | bool |
createInput(table parameters) | 创建附加到对象的脚本输入。 | bool |
editButton(table parameters) | 修改一个已存在的按钮。 | bool |
editInput(table parameters) | 修改现有输入。 | bool |
getButtons() | 返回包含该对象上所有按钮的表。 | table |
getInputs() | 返回一个表,包含该对象上的所有输入。 | table |
removeButton(int index) | 删除指定的按钮。 | bool |
removeInput(int index) | 删除指定的输入。 | bool |
自定义UI
自定义UI为您提供了广泛的元素类型,而不仅仅是按钮和输入,以放置到对象上。它是UI类的扩展,关于其使用的详细信息可以在UI页面中找到。
获取函数
这些函数从对象中获取信息。
函数名 | 描述 | 返回类型 |
---|---|---|
getAttachments() | 返回与容器的getObjects()相同格式的表。 | table |
getColorTint() | 颜色的色调。 | color |
getCustomObject() | 返回一个包含自定义对象的自定义对象信息的表。 | table |
getData() | 返回对象的表数据结构表示形式。适用于spawnObjectData(…)。 | table |
getDescription() | 描述,也显示为对象的工具提示的一部分。 | string |
getFogOfWarReveal() | 影响战争迷雾被揭示的设置 | table |
getGMNotes() | 游戏主持笔记只对黑色玩家可见。 | string |
getGUID() | 对象唯一标识符的字符串。 | string |
getJSON( indented) | 返回对象的JSON字符串表示形式。适用于spawnObjectJSON(…)。 缩进是可选的,默认值为true。 | string |
getJoints() | 返回附加到此对象的任何关节的信息。 | table |
getLock() | 对象是否上锁 | bool |
getName() | 名称,也显示为对象的工具提示的一部分。 | string |
getObjects() | 返回描述区域/袋子/牌组中包含的对象的数据。 | var |
getQuantity() | 返回包含的对象的数量(如果对象是包,牌组或堆),否则为-1。 | int |
getRotationValue() | 返回当前的rotationValue。旋转值用于给不同的旋转赋值(如骰子)。 | var |
getRotationValues() | 返回一个包含旋转值的表。旋转值用于给不同的旋转赋值(如骰子)。 | table |
getSelectingPlayers() | 返回当前选择对象的玩家颜色表。 | table |
getStateId() | 对象的当前状态ID(索引)。如果没有其他状态,则返回-1。状态id(索引)从1开始。 | int |
getStates() | 返回一个关于对象状态的信息表。 | table |
getValue() | 返回对象的值。根据对象的类型,这表示一些不同的东西。 | var |
getZones() | 返回对象当前占用的区域列表。 | table |
isDestroyed() | 如果对象被销毁(或将被销毁),则返回true。 | bool |
设置函数
这些函数将操作应用于对象。主要是修改对象的一些属性。
函数名 | 描述 | 返回类型 |
---|---|---|
setColorTint(color color) | 设置颜色色调。 | bool |
setCustomObject(table parameters) | 设置自定义对象的属性。 | bool |
setDescription(string description) | 设置对象的描述。显示在工具提示后延迟。 | bool |
setFogOfWarReveal(table fog_settings) | 建立设置并启用/禁用一个对象的战争迷雾的显示。. | bool |
setGMNotes(string notes) | 设置游戏主笔记只对玩家颜色黑色可见。 | bool |
setLock(bool lock) | 设置对象是否被锁定。 | bool |
setName(string name) | 设置对象的名称。显示在工具提示。 | bool |
setRotationValue(var rotation_value) | 设置对象的旋转值,即物理旋转对象。 | |
setRotationValues(table rotation_values) | 设置对象的旋转值。旋转值用于给不同的旋转赋值(如骰子)。 | bool |
setState(int state_id) | 设置对象的状态。状态id(索引)从1开始。 | obejct |
setValue(var value) | 设置对象的值。根据对象的类型,表示一些不同的东西。 | bool |
动作函数
这些函数对对象执行一般操作。
函数名 | 描述 | 返回类型 |
---|---|---|
addAttachment(object object) | 作为参数提供的对象被销毁并成为一个虚拟的对象子对象。 | bool |
addContextMenuItem(string label, bool toRunFunc, bool keep_open) | 向对象右键单击上下文菜单添加菜单项。 | bool |
addToPlayerSelection(string player_color) | 添加对象到玩家的选择。 | bool |
clearContextMenu() | 清除所有被addContextMenuItem(…)添加的菜单项。 | bool |
clone(table parameters) | 复制/粘贴这个对象,返回一个对新对象的引用。 | object |
cut(int count) | 在给定的牌数下切(分)一副牌。 | table |
deal(int number, string player_color, int index) | 将从牌组/袋/堆/个人物品中取对象。 | bool |
dealToColorWithOffset(vector offset, bool flip, string player_color) | 从一副牌到一个相对于手区位置取对象。 | object |
destroyAttachment(int index) | 销毁具有给定索引的附件。 | bool |
destroyAttachments() | 销毁所有附件。 | bool |
destruct() | 销毁对象。允许self.destruct()。 | bool |
drop() | 迫使一个物体(如果被玩家持有)被丢弃。 | bool |
flip() | 翻转对象。 | bool |
highlightOff(color color) | 从对象周围移除一个高亮。 | bool |
highlightOn(color color, float duration) | 在对象周围创建一个高亮显示。duration是可选的,以秒为单位指定,当省略时,对象保持高亮显示。 | bool |
jointTo(object object, table parameters) | 将对象连接在一起,方法与连接工具相同。 | bool |
putObject(object put_object) | 将一个物体放入容器(筹码堆/袋子/牌组)。 | object |
randomize(string color) | 洗牌/包,掷骰子/硬币,把其他物体举到空中。与默认按R相同。如果可选参数color被使用,这个函数将触发onObjectRandomized(),传递玩家的颜色。 | bool |
registerCollisions(bool stay) | 为全局碰撞事件注册此对象。 | bool |
reload() | 返回自身重生后的对象引用。 | object |
removeAttachment(int index) | 删除具有给定索引的子节点。使用getAttachments()查找索引属性。 | object |
removeAttachments() | 分离此对象的子对象。返回一个对象引用表 | table |
removeFromPlayerSelection(string player_color) | 从玩家的选择中移除对象。 | bool |
reset() | 重置该对象。重置一副牌会把所有的牌都带回来。重置一个包可以清除它的内容(对Loot和Infinite包都适用)。 | bool |
roll() | 掷硬币/骰子。 | bool |
shuffle() | 洗牌/摇牌袋里的东西。 | bool |
shuffleStates() | 在随机选择并更改为一个状态后,返回一个指向新状态的Object引用。 | object |
split(int piles) | 把一副牌尽可能均匀地分成若干摞。 | table |
spread(float distance) | 在一副牌上使用摊开动作。 | table |
takeObject(table parameters) | 从容器(包/牌组/筹码堆)中取出一个对象,返回对取出对象的引用。 | object |
unregisterCollisions() | 为全局碰撞事件注销此对象。 | bool |
组件函数
组件api是一种高级特性。理解Unity的工作原理是使用它们的必要条件。有关更多信息,请参阅组件简介。
名称 | 返回类型 | 描述 |
---|---|---|
getChild(string name) | GameObject | 返回一个匹配指定名称的子游戏对象。 |
getChildren() | table | 返回子游戏对象列表。 |
getComponent(string name) | Component | 从对象的组件列表中返回一个与指定名称匹配的组件 |
getComponentInChildren(string name) | Component | 返回一个与指定名称匹配的组件。通过递归搜索对象的组件及其子组件(深度优先)找到。 |
getComponents(string name) | table | 返回对象的组件列表。name是可选的,当指定时,只有指定名称的组件将被包括。 |
getComponentsInChildren(string name) | table | 返回通过递归搜索对象及其子对象(深度优先)找到的组件列表。name是可选的,当指定时,只有指定名称的组件将被包括。 |
隐藏函数
这些函数可以隐藏对象,类似于手区域或隐藏区域的作用。
函数名 | 描述 | 返回类型 |
---|---|---|
setHiddenFrom(table players) | 对指定的玩家隐藏对象,就像它在手牌区一样。 | bool |
setInvisibleTo(table players) | 对指定的玩家隐藏该对象,就像它在一个隐藏区域一样。 | bool |
attachHider(string id, bool hidden, table players) | setHiddenFrom(…)的更高级版本。 | bool |
attachInvisibleHider(string id, bool hidden, table players) | setInvisibleTo(…)的更高级版本。 | bool |
全局函数
这些函数可以在对象中使用,也可以在游戏世界中使用全局函数。
- self.getSnapPoints()获得附加到该对象的snap points。
- getsnappoints()获得的snap points没有附加到任何特定对象上,而是附加到游戏世界上。
函数名 | 描述 | 返回类型 |
---|---|---|
addDecal(table parameters) | 在物体或游戏世界中添加贴花。 | bool |
call(string func_name, table func_params) | 用于在另一个实体上调用Lua函数。 | var |
getDecals() | 返回附加到该对象或世界的所有贴花的信息。 | table |
getLuaScript() | 从实体获取一个字符串形式的Lua脚本。 | string |
getSnapPoints() | 返回表示接合点列表的表。 | table |
getTable(string table_name) | 另一个对象脚本中一个变量的数据值。只能返回一个表。 | table |
getVar(string var_name) | 另一个实体脚本中一个变量的数据值。不能返回表。 | var |
getVectorLines() | 返回表示此实体上当前向量线的数据表。参见setVectorLines获取表格格式。 | table |
setDecals(table parameters) | 设置对象上的贴花。这可以移除其他已经存在的贴花,并可以移除所有的贴花。 | bool |
setLuaScript(string script) | 输入一个字符串作为实体的Lua脚本。通常只在生成一个新对象后使用。 | bool |
setSnapPoints(table snap_points) | 将现有的接合点替换为指定的接合点列表。 | bool |
setTable(string func_name, table data) | 在另一个实体的脚本中创建/更新一个变量。仅用于表格。 | bool |
setVar(string func_name, var data) | 在另一个实体的脚本中创建/更新一个变量。不能设置桌子。 | bool |
setVectorLines(table parameters) | 从这个实体的参数列表生成向量线。 | bool |
对象行为
AB包 AssetBundle
AB包的行为出现在自定义AB包创建的对象上。
函数汇总
函数名 | 描述 | 返回类型 |
---|---|---|
getLoopingEffectIndex() | 当前循环效果的指数。索引从0开始。 | int |
getLoopingEffects() | 返回一个表,其中键“index”和“name”为每个循环效果。 | table |
getTriggerEffects() | 返回一个表,每个触发器的键是“index”和“name”。 | table |
playLoopingEffect(int index) | 开始播放循环效果。索引从0开始。 | nil |
playTriggerEffect(int index) | 开始发挥触发效果。索引从0开始。 | nil |
书本 Book
自定义PDF对象上显示书本行为。书本行为允许您操作显示的PDF。
成员变量
变量 | 类型 | 描述 |
---|---|---|
page_offset | int | 自定义PDF UI中显示的页码被偏移这个量。 |
例如,如果page_offset设置为10,那么UI中的第一个页面将是11,而不是1。负数是可以接受的,如果规则手册包含了PDF文件中的封面、索引等,那么负数是很有用的。
函数汇总
函数名 | 描述 | 返回类型 |
---|---|---|
clearHighlight() | 清除当前的高亮显示。 | bool |
getPage(bool offsetPageNumbering) | 获取PDF的当前页。 | int |
setHighlight(float x1, float y1, float x2, float y2) | 设置当前页上的高亮显示框。 | bool |
setPage(int page, bool offsetPageNumbering) | 设置当前页面。 | bool |
浏览器 Browser
浏览器行为出现在平板电脑对象上。
指示一个平板对象加载桌面模拟器主页。
object.Browser.url = "https://tabletopsimulator.com"
成员变量
变量 | 类型 | 描述 |
---|---|---|
url | string | 当前想要显示的URL。 |
pixel_width | int | 浏览器实际呈现到的像素宽度。 |
时钟 Clock
时钟行为出现在数字时钟对象上。
时钟模式
- Current Time: 显示房主的当前时间。
- Stopwatch: 显示正在进行的计数。
- Timer: 显示倒计时和一旦完成发出哔哔声。
成员变量
变量 | 类型 | 描述 |
---|---|---|
paused | bool | 如果时钟定时器暂停。 |
函数汇总
函数名 | 描述 | 返回类型 |
---|---|---|
getValue() | 当前时间在秒表或定时器模式。时钟模式返回0。这个函数的作用与Object的getValue()相同。 | int |
pauseStart() | 在秒表或计时器模式下暂停/恢复时钟。 | bool |
setValue(int seconds) | 将时钟切换到计时器并设置倒计时时间。这个函数的作用与Object的setValue()相同。 | bool |
showCurrentTime() | 切换时钟显示当前时间。它将清除任何秒表或计时器。 | bool |
startStopwatch() | 将时钟切换为秒表,将时间设置为0。它将重置时间,如果已经在秒表模式。 | bool |
计数器 Counter
计数器行为出现在计数器对象上。
函数
函数名 | 描述 | 返回类型 |
---|---|---|
clear() | 重置计数器为0。 | bool |
decrement() | 减少计数器的值1。 | bool |
getValue() | 返回计数器的当前值。这个函数的行为与Object的getValue()相同。 | int |
increment() | 增加计数器的值1。 | bool |
setValue() | 设置计数器的当前值。这个函数的行为与Object的setValue()相同。 | bool |
增加计数器的值。
object.Counter.increment()
布局区域 LayoutZone
布局区域行为出现在布局区域上。
函数
函数名 | 描述 | 返回类型 |
---|---|---|
getOptions() | 返回布局区域选项。 | table |
layout() | 导致布局区域(重新)布局。 | bool |
setOptions(table options) | 设置布局区域的选项。如果表中没有包含某个选项,那么该选项的zone值将保持不变。 | bool |
记录布局区域的选项。
log(zone.LayoutZone.getOptions())
选项
布局区域选项表可能包含以下属性。
名称 | 类型 | 描述 |
---|---|---|
allow_swapping | bool | 当将一个对象从一个完整组移动到另一个完整组时,所放置的对象将被移动到原始组。 |
alternate_direction | bool | 添加到组中的对象将向右对齐或向右对齐,这与组中的前一个对象不同。例如,在耍诡计的游戏中,用来使计数更容易。 |
cards_per_deck | int | 设置布局区域组合新添加的牌时所生成的牌的大小。 |
combine_into_decks | bool | 添加到区域的牌是否应该组合成牌组。你可以指定每副牌的牌数。 |
direction | int | 区域中群组扩展的方向。这将决定原点的角。 |
horizontal_group_padding | float | 组之间插入的水平空间的大小。 |
horizontal_spread | float | 组中每个对象与前一个对象水平移动的距离。 |
instant_refill | bool | 启用时,如果某个组被选中或删除,则布局的其余部分将触发填补空白 |
manual_only | bool | 该区域不会自动布局对象:它必须手动触发。 |
max_objects_per_group | int | 区域中的每个组不能包含超过此数目的对象。 |
max_objects_per_new_group | int | 当新对象添加到一个区域时,它们将被聚集到这么多对象的组中。 |
meld_direction | int | 组内对象扩展的方向。 |
meld_reverse_sort | bool | 启用时,组内的排序顺序颠倒 |
meld_sort | int | 组内部是如何分类的。 |
meld_sort_existing | bool | 启用时,所有组在布局时都会排序,而不仅仅是新添加的组。 |
new_object_facing | int | 确定新添加的对象是面朝上还是面朝下。 |
randomize | bool | 对象将被随机放置。 |
split_added_decks | bool | 添加到区域的牌组将被分割成各自的牌。 |
sticky_cards | bool | 当拿起卡片时,上面的卡片也会被拿起。 |
trigger_for_face_down | bool | 面朝下的物体将被放置在区域内。 |
trigger_for_face_up | bool | 面朝上的物体将被放置在区域。 |
trigger_for_non_cards | bool | 放置在区域上的非卡片物体将被放置 |
vertical_group_padding | float | 组之间插入的垂直空间大小。 |
vertical_spread | float | 组中每个对象与前一个对象垂直移动的距离。 |
RPG小雕像 RPGFigurine
RPG小雕像行为出现在带有内置动画的对象上,例如RPG Kit对象。
回调成员
这些是RPG小雕像成员变量,可以为其分配一个函数,该函数将在偶数发生时执行。
成员名 | 描述 |
---|---|
onAttack(table hitObjects) | 当RPG小雕像对象执行攻击时执行。 |
onHit(table attacker) | 当RPG小雕像对象被攻击时执行。 |
函数
函数名 | 描述 | 返回类型 |
---|---|---|
attack() | 随机播放一个攻击动画 | bool |
changeMode() | 改变雕像的当前模式。模式所代表的是基于小雕像。 | bool |
die() | 播放死亡动画或使其复活。 | bool |
制作一个RPG雕像攻击。
object.RPGFigurine.attack()
文本工具 TextTool
文本工具的行为出现在3DText对象上,也就是那些用文本工具创建的对象。
函数
函数名 | 描述 | 返回类型 |
---|---|---|
getFontColor() | 返回字体颜色表。 | color |
getFontSize() | 返回字体大小的Int值。 | int |
getValue() | 返回当前文本。行为与对象的getValue()相同。 | string |
setFontColor(color font_color) | 设置字体颜色。 | bool |
setFontSize(int font_size) | 设置字体大小。 | bool |
setValue(string text) | 设置当前文本。行为与对象的setValue(…)相同。 | bool |
对象组件
介绍
组件api是一种高级特性。理解Unity的工作原理是使用它们的必要条件。
组件是一个函数和变量的集合,它允许你控制对象的行为。
组件是一个Unity概念,它们是构成桌面模拟器对象的构建块。
游戏对象 GameObjects
《桌面模拟器》中的每个对象都是游戏对象。当游戏被创建时,游戏对象被加载和初始化,一些顶级游戏对象将通过桌面模拟器的Lua脚本api作为常规对象暴露出来,每个对象都有自己的脚本上下文。
有些lua暴露的对象是由子游戏对象的层次结构组成的。组件api允许访问并与这些子游戏对象进行交互(否则你将无法控制)。
组件
游戏对象本身是由组件组成的。典型的游戏对象应该包含Collider, Transform, Mesh等。这些组件描述了游戏对象的行为和视觉表现。
除了内置对象,组件api还提供了访问存在于AssetBundle中的游戏对象和组件。这意味着当你创建一个AssetBundle时,你可以附加所有的组件(灯光,声音等),你可以通过这些api来控制它们。
变量
每个组件都有多个变量。你可以修改这些变量来改变组件如何影响它所组成的游戏对象。
组件
成员变量
名称 | 类型 | 描述 |
---|---|---|
game_object | GameObject | 组件构成的游戏对象。 |
name | string | 组件的名称。 |
函数
名称 | 描述 | 返回值 |
---|---|---|
get(string name) | 获取组件上给定变量的值。 | var |
getVars() | 返回一个表,将变量名称(string)映射到它们的类型,该类型也表示为string。 | table |
set(string name, var value) | 将指定名称的变量设置为提供的值。 | bool |
游戏对象
成员变量
名称 | 类型 | 描述 |
---|---|---|
name | string | The name of the Component. |
函数
函数名 | 描述 | 返回类型 |
---|---|---|
getChild(string name) | 返回一个匹配指定名称的子游戏对象。 | GameObject |
getChildren() | 返回子游戏对象列表。 | table |
getComponent(string name) | 从游戏对象的组件列表中返回一个匹配指定名称的组件。 | Component |
getComponentInChildren(string name) | 返回一个与指定名称匹配的组件。通过递归地搜索游戏对象的组件及其子组件(深度优先)找到。 | Component |
getComponents(string name) | 返回游戏对象的组件列表。name是可选的,当指定时,只有指定名称的组件将被包括。 | table |
getComponentsInChildren(string name) | 返回通过递归搜索游戏对象及其子对象找到的组件列表(深度优先)。name是可选的,当指定时,只有指定名称的组件将被包括。 | table |
例子
这些例子都是完整的脚本,可以放在一个常规的红块上。
禁用对象的阴影接收。
function onLoad() -- Get the MeshRenderer of the block's GameObject local meshRenderer = self.getComponent("MeshRenderer") -- Disable its ability to have a shadow cast onto it by another Object meshRenderer.set("receiveShadows", false) end
禁用一个对象的(box)碰撞器。这通常会导致对象穿过表下落。
function onLoad() -- Get the BoxCollider Component of the block's GameObject local boxCollider = self.getComponent("BoxCollider") -- Disable the BoxCollider Component boxCollider.set("enabled", false) end
禁用一个对象的音频。物体将不再发出声音,例如,当从桌上拿起或掉在桌上时。当其他物体与该物体碰撞时,可能会继续发出声音。
function onLoad() -- Get the AudioSource Component of the block's GameObject local blockComp = self.getComponent("AudioSource") -- Mute it blockComp.set("mute", true) end