【发布时间】:2013-03-23 00:38:18
【问题描述】:
我正在编写一个附加到一个对象的 LSL 脚本,并想更改 另一个 对象的透明度,该对象的 UUID 为(存储在 key 变量中)。 p>
我已阅读文档,但甚至无法弄清楚如何更改另一个对象的名称/描述,更不用说透明度了。我只能找到修改本地对象的方法。
LSL 是否不支持修改其他对象的属性,即使它们位于同一区域并具有相同的所有者?
【问题讨论】:
我正在编写一个附加到一个对象的 LSL 脚本,并想更改 另一个 对象的透明度,该对象的 UUID 为(存储在 key 变量中)。 p>
我已阅读文档,但甚至无法弄清楚如何更改另一个对象的名称/描述,更不用说透明度了。我只能找到修改本地对象的方法。
LSL 是否不支持修改其他对象的属性,即使它们位于同一区域并具有相同的所有者?
【问题讨论】:
如果它在同一个区域,那么您可以在一个 prim 中添加 llListen(),并在私人频道上的另一个中使用 llRegionSay()。
像这样:
default
{
state_entry()
{
}
touch_start(integer total_number)
{
llRegionSay(-123456,"1.0"); // Channel -123456 can be anything. "1.0" will be the transparency setting passed to the 2nd prim
}
}
default
{
state_entry()
{
llListen(-123456, "", "", ""); // Make the prim listen
}
listen( integer channel, string name, key id, string message )
{
if (channel==-123456) { // Match the same private channel
llSetAlpha((float)message, ALL_SIDES); // Convert "message" into an integer and pass to the llSetAlpha() function as the transparency - 0 = invisible 1 = visible
}
}
}
【讨论】:
不要使用 llRegionSay,使用 llRegionSayTo 以便您可以指定接收 prim 的 UUID。此外,在第二个对象的侦听状态下,您应该让它忽略具有不匹配所有者的任何对象
第一行监听:
if(llGetOwnerKey(id) != llGetOwner()) return;
【讨论】: