【问题标题】:Change transparency of another object更改另一个对象的透明度
【发布时间】:2013-03-23 00:38:18
【问题描述】:

我正在编写一个附加到一个对象的 LSL 脚本,并想更改 另一个 对象的透明度,该对象的 UUID 为(存储在 key 变量中)。 p>

我已阅读文档,但甚至无法弄清楚如何更改另一个对象的名称/描述,更不用说透明度了。我只能找到修改本地对象的方法。

LSL 是否不支持修改其他对象的属性,即使它们位于同一区域并具有相同的所有者?

【问题讨论】:

    标签: linden-scripting-language


    【解决方案1】:

    如果它在同一个区域,那么您可以在一个 prim 中添加 llListen(),并在私人频道上的另一个中使用 llRegionSay()

    像这样:

    Prim 1 脚本(Prim 发送命令)

    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
        }
    }
    

    Prim 2 脚本(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
            }
        }
    }
    

    【讨论】:

    • 好主意,没想到。我想我们不能直接编辑对象的事实与安全有关?
    • 可能是这样。如果对象是链接的,那么它没有问题。现在也可以在远程对象之间传递脚本......这似乎是一个比这更大的安全问题:)
    【解决方案2】:

    不要使用 llRegionSay,使用 llRegionSayTo 以便您可以指定接收 prim 的 UUID。此外,在第二个对象的侦听状态下,您应该让它忽略具有不匹配所有者的任何对象

    第一行监听:

    if(llGetOwnerKey(id) != llGetOwner()) return;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-30
      • 2015-06-12
      • 2017-03-14
      • 2011-01-20
      • 2013-03-20
      • 2012-01-20
      • 2021-08-13
      • 2015-01-04
      相关资源
      最近更新 更多