重要说明: 请注意,我们采用 SWIG 封装 Lua 中的 C++ 类,所以所有对象的行为都类似指针 - 包括向量(Vision.hkvVec3)或颜色(Vision.VColorRef)。 因此,赋值(vector1 = vector2)所修改的是指针而非数据。 在这种情况下,您应当使用 clone() 而非赋值(vector1 = vector2:clone())。 ‘+’、‘-’、‘*’、‘/’等关键字可以放心使用,因为它们会为您生成一个新实例:vector1 = vector2 + vector3
代码插入图标提供一份传递到 Lua 系统的可用事件类型的列表。 右键单击列表中的某条目,该函数将被放置到您的脚本的末尾。
例如,选择 OnThink(self) 条目将生成如下 Lua 代码片段:
function OnThink(self) end
自动完成功能也可手动激活,方法为组合键 CTRL + SPACE,也可用 ESC 键关闭。
该图标会打开一份标准帮助文档,全面涵盖 Vision Lua 类,另有使用中的命令的简单示例。
提示: 如果您想获得有关某个具体命令的帮助,例如”OnCreate”、”SetPosition”等等,只需在脚本编辑器中选择文本并按 F1 键,帮助程序会立刻为您搜索关键词。
ScriptingAPI CHM 对于所有脚本命令都是一份宝贵的资源,但为帮助您在 Lua 学习过程中入门,有一些简单的命令和规则需要了解:
信息: 示例项目中有一份脚本示例:/Data/Vision/Samples/Engine/Scripting/LuaScripting.project。
Self
self 变量用于引用该脚本所附的实体。 对于某个实体类型,我们可以使用如下脚本行。
self:SetMesh("Models\\Warrior\\Warrior.model") self:SetScaling(2)
这个小示例会把实体模型文件设给 Warrior,并将其统一缩放增加到 2。
Debug:PrintLine("Hello World")
local numProps = self:GetNumProperties(); Debug:PrintLine("The entity has " .. numProps .. " prop(s)")
Debug:PrintLine("Setting a new property value...") self:SetProperty("myProp", Vision.hkvVec3(1.2, 2.3, 3.4)); propVal = self:GetProperty("myProp"); Debug:PrintLine("The entity's new property value is: " .. tostring(propVal))
为确保运动在不同帧率下保持恒速,您可以将速度因数乘以时间增量。 当前时间增量(从上次调用至今的时间)可从 Timer:GetTimeDiff() 函数方法返回。
function OnThink(self) -- rotate entity over time local t = Timer:GetTimeDiff() self:IncOrientation(t*10, 0, 0) end