根据manual,默认字符脚本将侦听名称为toolanim 的StringValue。
您创建此值并为其提供父级。设置 Parent 属性将使其成为该父级的子级。那时父级知道有一个具有该特定名称的 StringValue 并且它将通过播放动画来响应它。
然后该 StringValue 很可能被销毁,脚本将等待另一个实例响应。
这是 Lua 中的一个非常简单的实现:
local parent = setmetatable({}, {__newindex = function (t,k,v)
if k == "Child" and v.Name == "toolanim" then
print("parent: Hey someone gave me a child named toolanim!")
print("parent: let's see what I need to do!")
if v.Value == "Slash" then
print("Slash!!!! <- fancy animation")
end
end
end})
local stringValue = setmetatable({},{__newindex = function (t,k,v)
if k == "Parent" then
print("stringValue: Someone gave me a Parent! Hey parent, I'm your child now!")
rawset(t, "Parent", v)
v.Child = t
else
rawset(t, k, v)
end
end})
stringValue.Name = "toolanim"
stringValue.Value = "Slash"
stringValue.Parent = parent
这会创建一些父对象,如果子对象具有正确的属性,它将运行“动画”。
当另一个对象得到一个触发整个事情的父对象时,它会将自己设置为父对象的子对象。
这是使用 Lua 的 __newindex 元方法实现的。如果不清楚,请参考 Lua 参考 manual。