“虚拟世界/脚本手册”的版本间的差异

来自人工智能助力教育知识百科
跳转至: 导航搜索
Wyg讨论 | 贡献
 
(未显示5个用户的13个中间版本)
第1行: 第1行:
[[test]]
+
{{VWSnav}}
{{LSL Header|ml=*}}
+
==示例==
__NOTOC__
+
===动态纹理===
LSL (Linden Scripting Language) is the scripting language that gives behavior to Second Life primitives, objects, and avatars. This is a community effort to provide an accurate & open documentation resource on LSL for scripters of all skill levels.
+
*llSetTextureAnim( integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate );
 +
**通过在特定面上设置材质的尺寸范围和偏移,让材质产生动画效果。
 +
**integer mode – mask of Mode flags
 +
**integer face – face number or ALL_SIDES
 +
**integer sizex – horizontal frames (ignored for ROTATE and SCALE)
 +
**integer sizey – vertical frames (ignored for ROTATE and SCALE)
 +
**float start – Start position/frame number (or radians for ROTATE),支持负数
 +
**float length – number of frames to display (or radians for ROTATE)
 +
**float rate – frames per second (must not be zero),支持负数
 +
<pre>
 +
default
 +
{
 +
    state_entry()
 +
    {
 +
        llSetTextureAnim(ANIM_ON | SMOOTH | LOOP , ALL_SIDES, 1, 1, 1.0, 1.0, 1.0);
 +
    }
 +
}
 +
</pre>
 +
*mode
 +
**ANIM_ON 0x01 Texture animation is on. This must be set to start the animation, cleared to stop it.
 +
**LOOP 0x02 Loop the texture animation.
 +
**REVERSE 0x04 Play animation in reverse direction.
 +
**PING_PONG 0x08 Play animation going forwards, then backwards.
 +
**SMOOTH 0x10 Slide in the X direction, instead of playing separate frames.In both SCALE and ROTATE modes, causes smooth transitions.
 +
**ROTATE 0x20 Animate texture rotation.Does not work with SCALE
 +
**SCALE 0x40 Animate the texture scale.Does not work with ROTATE
  
Feel free to edit and add content. For more information on how to edit the wiki, see [[Project:Editing Guidelines|Editing Guidelines]]. Do not copy any information from other sources, unless you are sure about the copyright agreements.  See the [[Talk:LSL Portal|LSL Portal discussion]] page for more information.
+
===旋转的风车===
 +
#新建一些模型,设置选择中心为根连接物体
 +
#在根物体上设置脚本
 +
#llTargetOmega函数
 +
*llTargetOmega(vector axis, float spinrate, float gain)
 +
*功能:使物体指定速度匀速平滑地旋转(即设置目标的旋转速度)。
 +
*axis: 供物体旋转的轴,会影响速度, (<0,0,2>,1,1)要比(<0,0,1>,1,1)旋转速度快一倍;
 +
*spintate:旋转速度,为每秒的速度
 +
*gain:调节最终旋转力量,此参数只对物理对象其作用,对非物理对象,该参数值也不能为0。
 +
<pre>
 +
default
 +
{
 +
  state_entry()
 +
  {
 +
    llTargetOmega(<0,0,1>,PI,0.05);
 +
  }
 +
}
 +
</pre>
  
'''Want to learn LSL? See [[LSL Tutorial]].'''
+
===传送门===
 +
点击一个物体传送到指定地点:
 +
#新建一个物体
 +
#在“一般”属性中设置“点击以”“坐在物体上”
 +
#新建脚本
 +
<font color='red'>注意:</font>换算相对坐标时应该考虑物体自身的旋转量。某些基本物体在建造时是有初始的旋转量的(如:球为<0,90,0>)。
 +
<pre>
 +
default
 +
{
 +
    state_entry()
 +
    {
 +
        llSitTarget(<2.2,4.3,126.5>,ZERO_ROTATION);//设置目标地点相对物体的坐标值和旋转量,注意如果原物体有旋转,会影响相关结果
 +
        llSetTimerEvent(0.1);
 +
    }
 +
    timer()
 +
    {
 +
        llUnSit(llAvatarOnSitTarget());//解除“坐下”
 +
        llSetTimerEvent(0.2);//0.2秒后执行timer()
 +
    }
 +
}
  
<div id="box">
 
{| width="100%" rules="all" style="border-width: 0px; border-spacing: 5px;"
 
|- valign="top" rules="all" style="border-width: 1px 1px 1px 1px; padding: 1px 1px 1px 1px; border-style: solid solid solid solid; border-color: gray;"
 
| height="1" width="30%"|
 
  
== LSL Portal ==
+
如果要实现跨岛传送,则用osTeleportAgent函数,可以如下实现:
<div style="padding: 0.5em;">
 
* [[LSL Editing Primer|Editing Primer]] - Editing Instructions
 
* [[LSL Portal Guidelines|Guidelines]] - Administration and Design Standards (Mission, rules, layout, etc.)
 
* [[LSL Portal To-do|To-Do]] - Edit/Revisions To-Do Listing
 
* [[LSL Portal Translation Project|Translation Project]] - Translation Coordination
 
</div>
 
|height="1" width="30%" rowspan="2"|
 
  
== LSL Language Reference ==
+
string Destination = "luguo2"; // 该参数是用来标识岛的名称;
<div style="padding: 0.5em;">
+
vector LandingPoint = <128,128,50>; //  该参数用来标识X、Y、Z,代表到达目的地的坐标
* [[:Category:LSL Constants|Constants]]
+
vector LookAt = <1,1,1>; // 该参数用来标识当到达时所面对的方向
* [[:Category:LSL Events|Events]]
+
default
* {{LSLGC|Flow Control}}
+
{
** [[for]]
+
  on_rez(integer start_param)
** [[if]]
+
  {
** [[while]]
+
    llResetScript();
** [[do-while]]
+
  }
** [[jump]]
+
  changed(integer change) // something changed, take action
** [[return]]
+
  {
** [[state]]
+
    if(change & CHANGED_OWNER)
* [[:Category:LSL Functions|Functions]]
+
      llResetScript();
**<span class="plainlinks">[{{fullurl:Category:LSL_Functions}}#mw-pages (A..L)]</span>
+
    else if (change & 256) // that bit is set during a region restart
**<span class="plainlinks">[{{fullurl:Category:LSL_Functions|from=L}}#mw-pages (L..T)]</span>
+
      llResetScript();
**<span class="plainlinks">[{{fullurl:Category:LSL_Functions|from=T}}#mw-pages (T..Z)]</span>
+
  }
**[[LSL_Function_ID|(By internal index id)]]
+
  state_entry()
* [[LSL Operators|Operators]]
+
  {
* [[state|States]]
+
    llWhisper(0, "OS Teleportal Active");
* [[:Category:LSL Types|Types]]
+
  }
** [[integer]]
+
  touch_start(integer num_detected)  
** [[float]]
+
  {
** [[string]]
+
    key avatar = llDetectedKey(0);// 用于获取要传送的人(即接触物体的人);
** [[key]]
+
    llInstantMessage(avatar, "Teleporting you to : "+Destination);
** [[list]]
+
    osTeleportAgent(avatar, Destination, LandingPoint, LookAt); //最终的实现函数
** [[vector]]
+
** [[rotation]]
+
  }
* [[LSL Variables|Variables]]
+
}
* [[LSL Errors|Errors]]
+
</pre>
</div>
 
|height="1" width="25%" rowspan="5"|
 
  
== {{LSLGC||LSL Features by category}} ==
+
===时钟===
<div style="padding: 0.5em;">
+
先建立一个面板,再建立时分秒针。秒针的模型建议是一个属性Slice B0.5 E1.0的被“切”掉一半的长方体,这样直接设置旋转量可以看出旋转效果。
{| border="0" cellspacing="0" cellpadding="0"
+
以秒针为例,时分针类似。
|-valign="top"
 
|width="50%"|
 
* [[:Category:LSL Alpha|Alpha]]
 
* [[:Category:LSL Animation|Animation]]
 
* [[:Category:LSL Attachment|Attachments]]
 
* [[:Category:LSL Avatar|Avatar]]
 
* [[:Category:LSL Camera|Camera]]
 
* [[:Category:LSL Collision|Collision]]
 
* [[:Category:LSL Color|Color]]
 
* [[:Category:LSL Communications|Communications]]
 
* [[:Category:LSL Controls|Controls]]
 
* [[:Category:LSL Dataserver|Dataserver]]
 
* [[:Category:LSL Dialog|Dialog]]
 
* [[:Category:LSL Face|Face]]
 
* [[:Category:LSL Group|Group]]
 
* [[:Category:LSL Inventory|Inventory]]
 
* [[:Category:LSL Light|Light]]
 
* [[:Category:LSL Link|Link]]
 
* [[:Category:LSL_List|Lists]]
 
* [[:Category:LSL Math|Math]]
 
* [[:Category:LSL Needs Example|Needs Example]]
 
* [[:Category:LSL Permissions|Permissions]]
 
* [[:Category:LSL Physics|Physics]]
 
* [[:Category:LSL Prim|Primitive]]
 
* [[:Category:LSL Rotation|Rotation]]
 
* [[:Category:LSL_Script|Scripts]]
 
* [[:Category:LSL Sensor|Sensor]]
 
* [[:Category:LSL Sound|Sound]]
 
* {{LSLGC|Text}}
 
** {{LSLGC|Chat}}
 
** {{LSLGC|Notecard}}
 
** {{LSLGC|String}}
 
* [[:Category:LSL Teleport|Teleport]]
 
* [[:Category:LSL Texture|Texture]]
 
* [[:Category:LSL Time|Time]]
 
* [[:Category:LSL Vehicle|Vehicle]]
 
* [[:Category:LSL Video|Video]]
 
* [[:Category:LSL World|World]]
 
|width="50%"|
 
* {{LSLGC|Avatar}}
 
** {{LSLGC|Animation}}
 
** {{LSLGC|Attachment}}
 
** {{LSLGC|Camera}}
 
** {{LSLGC|Controls}}
 
** {{LSLGC|Sit}}
 
* {{LSLGC|Communications}}
 
** {{LSLGC|Chat}}
 
** {{LSLGC|Dialog}}
 
** {{LSLGC|HTTP}}
 
** {{LSLGC|XML-RPC}}
 
* [[:Category:LSL Detected|Detection]]
 
** {{LSLGC|Collision}}
 
** {{LSLGC|Sensor}}
 
** {{LSLGC|Touch}}
 
* {{LSLGC|Functions}}
 
** {{LSLGC|God Mode}}
 
* {{LSLGC|Inventory}}
 
** {{LSLGC|Creator}}
 
** {{LSLGC|Notecard}}
 
** {{LSLGC|Owner}}
 
* {{LSLGC|Media}}
 
** {{LSLGC|Prim Media}}
 
** {{LSLGC|Sound}}
 
** {{LSLGC|Video}}
 
* {{LSLGC|Movement}}
 
** {{LSLGC|Physics}}
 
*** {{LSLGC|Damping}}
 
*** {{LSLGC|Hover}}
 
** {{LSLGC|Rotation}}
 
* {{LSLGC|Object}}
 
** {{LSLGC|Link}}
 
** {{LSLGC|Vehicle}}
 
* {{LSLGC|Permissions}}
 
** [[:Category:LSL Permissions/Asset|Asset]]
 
** [[:Category:LSL Permissions/Script|Script]]
 
* {{LSLGC|Prim|Primitive}}
 
** {{LSLGC|Effects}}
 
*** {{LSLGC|Light}}
 
*** {{LSLGC|Particles}}
 
** {{LSLGC|Face}}
 
*** {{LSLGC|Alpha}}
 
*** {{LSLGC|Color}}
 
*** {{LSLGC|Texture}}
 
* {{LSLGC|Region}}
 
** {{LSLGC|Ground}}
 
** {{LSLGC|Parcel}}
 
** {{LSLGC|Security}}
 
** {{LSLGC|Time}}
 
* {{LSLGC|Script}}
 
** {{LSLGC|Error}}
 
*** [[:Category:LSL Error/Math|Math Errors]]
 
** {{LSLGC|Keywords}}
 
** {{LSLGC|Math}}
 
** {{LSLGC|Types}}
 
|}
 
</div>
 
|-valign="top" rules="all" style="border-width: 1px 1px 1px 1px; padding: 1px 1px 1px 1px; border-style: solid solid solid solid; border-color: gray;"
 
|height="1"|
 
  
== Developer Resources ==
+
//llSetRot函数设置旋转量,llGetWallclock()函数可获取当前服务器上时间(全部累加换算成秒,比如1:01:01就是3661,如需要具体时分秒需进行简单换算),数据是float?还是integer?
<div style="padding: 0.5em;">
+
default
 +
{
 +
    state_entry()
 +
    {
 +
        llSetTimerEvent(0.3);
 +
    }
 +
    timer()
 +
    {
 +
        llSetRot(llEuler2Rot(<((integer)llGetWallclock()%60)*PI/30,0,0>));
 +
        llSetTimerEvent(1);
 +
    }
 +
}
  
* [[:Category:LSL_User-Defined_Functions|User-Defined Functions]]
+
===采蘑菇===
* [[LSL Protocol|User-Defined  Protocols & APIs]]
+
在一定空间内彩色蘑菇到处漂移,找到并点击他,他就被抓住了。
----
+
#建立蘑菇盘,记录其位置
* [[:Category:LSL Mentors|Mentors]]
+
#创建蘑菇,注意连接
* [[:Category:LSL Teachers|Teachers]]
+
#编辑脚本
* [[LSL_Help|Help]]
+
<pre>
----
+
//设置蘑菇变化的基本位置
* [[LSL Write Once Debug Everywhere|Write Once Debug Everywhere]]
+
vector gBase=<147,92,23>;//可以建立一个物体,然后设置位置
* [[LSL_Alternate_Editors|Alternate Editors]]
+
//random distance
----
+
float gDistance_x=5;
* [[LSL Tutorial|Tutorials]]
+
float gDistance_y=5;
* [[:Category:LSL Examples|Examples]]
+
float gDistance_z=1;
* [[LSL Style Guide|Style Guide]]
+
//time
* [[LSL Script Efficiency|Efficiency]]
+
integer gTimechange=4;
* [[LSL Script Memory|Memory]]
+
//装蘑菇的盘子位置
* [[LSL Hacks|Hacks]]
+
vector gContainer=<146.743,80.677,22.375>;
* [[LSL Benchmarking Scripts|Benchmarking Scripts]]
+
float gContainSize=0.5;
----
+
//communite channel
* [[:Category:LSL Categorized Library|Categorized Library]]
+
integer gCChannel=1;
* [[:Category:LSL Library|Library]]
 
----
 
* [[LSL Test Harness|Test Harness]]
 
* [[LSL Useful Function WishList|Useful Function Wish-List]]
 
</div>
 
|- valign="top" rules="all" style="border-width: 1px 1px 1px 1px; padding: 1px 1px 1px 1px; border-style: solid solid solid solid; border-color: gray;"
 
| height="1" colspan="2"|
 
{{LSL News}}
 
|- valign="top" rules="all" style="border-width: 1px 1px 1px 1px; padding: 1px 1px 1px 1px; border-style: solid solid solid solid; border-color: gray;"
 
| height="1" colspan="2"|
 
{{LSL Bugs}}
 
|- valign="top" rules="all" style="border-width: 1px 1px 1px 1px; padding: 1px 1px 1px 1px; border-style: solid solid solid solid; border-color: gray;"
 
| colspan="2"|
 
  
== Other LSL Wikis ==
+
default{
<div style="padding: 0.5em;">
+
    state_entry(){
* [http://lslwiki.net/lslwiki/wakka.php?wakka=HomePage LSL Wiki] (The original LSL Wiki.)
+
        llSetColor(<llFrand(1.0),llFrand(1.0),llFrand(1.0)>,ALL_SIDES);
* [http://lsl.project.zone/lsl/ Unofficial LSL Reference Wiki] (work in progress)
+
        llSetLinkColor(LINK_ALL_OTHERS,<llFrand(1.0),llFrand(1.0),llFrand(1.0)>,ALL_SIDES);   
</div>
+
        llSetTimerEvent(gTimechange);
 +
        llListen(gCChannel, "", "", "");
 +
    }
 +
    touch_start(integer num_detected){
 +
        llSetTimerEvent(0);
 +
        llSetPos(gContainer+<gContainSize*llFrand(gContainSize),gContainSize*llFrand(gContainSize),0>);
 +
        llSay(0,"Oh,Bing Catched!");
 +
    }
 +
    timer(){
 +
        llSetPos(gBase+<gDistance_x*llFrand(1.0),gDistance_y*llFrand(1.0),gDistance_z*llFrand(1.0)>);
 +
    }
 +
    listen( integer channel, string name, key id, string message ){
 +
        if(message=="reset"){
 +
            llResetScript();
 +
        }
 +
    }
 +
}
 +
</pre>
  
== Snapshot Mirrors ==
+
===坐在某个物体上===
<div style="padding: 0.5em;">
+
#新建一个元件,设置点击行为为:坐下
</div>
+
#在该物体中增加脚本:
|}
+
<pre>
</div>
+
default
[[Category:Portals]]
+
{
[[Category:Creation]]
+
    state_entry()
[[Category:LSL|*]]
+
    {
 +
        llSitTarget(<0, 1.2, 1.2>, llEuler2Rot( <0.0, 0.0, 60.0> * DEG_TO_RAD ));
 +
    }
 +
}
 +
</pre>
 +
*<0, 1.2, 1.2>,设置坐的位置,相对于物体的中心。注意需要考虑人本身的中心位置。
 +
*llEuler2Rot( <0.0, 0.0, 60.0> * DEG_TO_RAD ),设置坐的方向,相对旋转。
 +
 
 +
===开关门===
 +
#建一个门轴和门面
 +
#链接两个模型,让门轴为根物体(最后选中的)
 +
#在根物体上建立以下脚本
 +
<pre>
 +
integer vgIntDoorSwing = 90;
 +
rotation vgRotDoorSwing;
 +
default{
 +
  state_entry(){
 +
    vgRotDoorSwing = llEuler2Rot( <0.0, 0.0, vgIntDoorSwing> * DEG_TO_RAD );
 +
  }
 +
  touch_start( integer vIntTouched ){
 +
    vgRotDoorSwing.s *= -1;
 +
    llSetLocalRot( vgRotDoorSwing * llGetLocalRot());
 +
  }
 +
}
 +
 
 +
</pre>
 +
 
 +
===粒子效果===
 +
#参数解释,请参考API手册,也可以通过名字猜猜。
 +
#首先在场景中建立一个正方体,然后在其“内容”属性中,新建脚本,复制下面的代码即可;
 +
#要让粒子喷出指定的贴图,需要将贴图从资产库中拖到“内容”属性页下。
 +
<pre>
 +
default {
 +
    state_entry()
 +
    {
 +
        llSetAlpha(0.0, ALL_SIDES);
 +
        llSetStatus(16,TRUE);
 +
        llParticleSystem(  [
 +
          PSYS_SRC_TEXTURE, llGetInventoryName(INVENTORY_TEXTURE, 0), //表示取得内容中的第一个材质,可以直接把资产库中的材质拖拽到内容中。
 +
          PSYS_PART_START_SCALE, <0.25, 0.5, 0>,
 +
          PSYS_PART_END_SCALE, <0.25, 0.5, 0>,
 +
          PSYS_PART_START_COLOR, <0.856,0.723,0.203>,   
 +
          PSYS_PART_END_COLOR, <0.856,0.203,0.234>,
 +
          PSYS_PART_START_ALPHA,  0.5,           
 +
          PSYS_PART_END_ALPHA, 0.1,   
 +
       
 +
          PSYS_SRC_BURST_PART_COUNT, 7,
 +
          PSYS_SRC_BURST_RATE,  0.03, 
 +
          PSYS_PART_MAX_AGE, 1.3,
 +
          PSYS_SRC_MAX_AGE, 0.0, 
 +
       
 +
          PSYS_SRC_PATTERN, 2,  // 1=DROP, 2=EXPLODE, 4=ANGLE, 8=ANGLE_CONE,
 +
 
 +
          PSYS_SRC_ACCEL, <0.0,0.0,-0.8>, 
 +
          PSYS_SRC_BURST_RADIUS, 0.04,
 +
          PSYS_SRC_BURST_SPEED_MIN, 2, 
 +
          PSYS_SRC_BURST_SPEED_MAX, 2,
 +
         
 +
          PSYS_SRC_TARGET_KEY, llGetOwner(),
 +
         
 +
          PSYS_SRC_ANGLE_BEGIN,  40*DEG_TO_RAD,
 +
          PSYS_SRC_ANGLE_END, 90*DEG_TO_RAD, 
 +
          //  PSYS_SRC_OMEGA, <0,0,0>,
 +
       
 +
          // PSYS_SRC_TARGET_KEY,      llGetLinkKey(llGetLinkNum() + 1),     
 +
             
 +
          PSYS_PART_FLAGS, ( 0     
 +
                                | PSYS_PART_INTERP_COLOR_MASK 
 +
                                | PSYS_PART_INTERP_SCALE_MASK 
 +
                              | PSYS_PART_EMISSIVE_MASK 
 +
                                | PSYS_PART_FOLLOW_VELOCITY_MASK
 +
                            //  | PSYS_PART_WIND_MASK           
 +
                            //  | PSYS_PART_BOUNCE_MASK       
 +
                            // | PSYS_PART_FOLLOW_SRC_MASK   
 +
                            // | PSYS_PART_TARGET_POS_MASK   
 +
                            // | PSYS_PART_TARGET_LINEAR_MASK   
 +
                     
 +
            ) ] );
 +
        }
 +
    }
 +
 
 +
</pre>

2024年8月23日 (五) 08:48的最新版本

百科首页 - 3D虚拟世界 - 音乐与人工智能 - 人工智能机器人 - 知识百科 - 关于我们 - 网站首页

脚本首页 | Vehicles | NPC | HTTP | 脚本间通信 | 翻译参考

示例

动态纹理

  • llSetTextureAnim( integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate );
    • 通过在特定面上设置材质的尺寸范围和偏移,让材质产生动画效果。
    • integer mode – mask of Mode flags
    • integer face – face number or ALL_SIDES
    • integer sizex – horizontal frames (ignored for ROTATE and SCALE)
    • integer sizey – vertical frames (ignored for ROTATE and SCALE)
    • float start – Start position/frame number (or radians for ROTATE),支持负数
    • float length – number of frames to display (or radians for ROTATE)
    • float rate – frames per second (must not be zero),支持负数
default
{
    state_entry()
    {
        llSetTextureAnim(ANIM_ON | SMOOTH | LOOP , ALL_SIDES, 1, 1, 1.0, 1.0, 1.0);
    }
}
  • mode
    • ANIM_ON 0x01 Texture animation is on. This must be set to start the animation, cleared to stop it.
    • LOOP 0x02 Loop the texture animation.
    • REVERSE 0x04 Play animation in reverse direction.
    • PING_PONG 0x08 Play animation going forwards, then backwards.
    • SMOOTH 0x10 Slide in the X direction, instead of playing separate frames.In both SCALE and ROTATE modes, causes smooth transitions.
    • ROTATE 0x20 Animate texture rotation.Does not work with SCALE
    • SCALE 0x40 Animate the texture scale.Does not work with ROTATE

旋转的风车

  1. 新建一些模型,设置选择中心为根连接物体
  2. 在根物体上设置脚本
  3. llTargetOmega函数
  • llTargetOmega(vector axis, float spinrate, float gain)
  • 功能:使物体指定速度匀速平滑地旋转(即设置目标的旋转速度)。
  • axis: 供物体旋转的轴,会影响速度, (<0,0,2>,1,1)要比(<0,0,1>,1,1)旋转速度快一倍;
  • spintate:旋转速度,为每秒的速度
  • gain:调节最终旋转力量,此参数只对物理对象其作用,对非物理对象,该参数值也不能为0。
default
{
  state_entry()
  {
    llTargetOmega(<0,0,1>,PI,0.05);
  }
}

传送门

点击一个物体传送到指定地点:

  1. 新建一个物体
  2. 在“一般”属性中设置“点击以”“坐在物体上”
  3. 新建脚本

注意:换算相对坐标时应该考虑物体自身的旋转量。某些基本物体在建造时是有初始的旋转量的(如:球为<0,90,0>)。

 default
 {
     state_entry()
     {
        llSitTarget(<2.2,4.3,126.5>,ZERO_ROTATION);//设置目标地点相对物体的坐标值和旋转量,注意如果原物体有旋转,会影响相关结果
         llSetTimerEvent(0.1);
     }
     timer()
     {
        llUnSit(llAvatarOnSitTarget());//解除“坐下”
         llSetTimerEvent(0.2);//0.2秒后执行timer()
     }
 }


如果要实现跨岛传送,则用osTeleportAgent函数,可以如下实现:

string Destination = "luguo2"; // 该参数是用来标识岛的名称; 
vector LandingPoint = <128,128,50>; //  该参数用来标识X、Y、Z,代表到达目的地的坐标
vector LookAt = <1,1,1>; // 该参数用来标识当到达时所面对的方向
default
{
  on_rez(integer start_param)
  {
    llResetScript();
  }
  changed(integer change) // something changed, take action
  {
    if(change & CHANGED_OWNER)
      llResetScript();
    else if (change & 256) // that bit is set during a region restart
      llResetScript();
  }
  state_entry()
  {
    llWhisper(0, "OS Teleportal Active");
  }
  touch_start(integer num_detected) 
  {
    key avatar = llDetectedKey(0);// 用于获取要传送的人(即接触物体的人);
    llInstantMessage(avatar, "Teleporting you to : "+Destination);
    osTeleportAgent(avatar, Destination, LandingPoint, LookAt); //最终的实现函数
 
  }
}

时钟

先建立一个面板,再建立时分秒针。秒针的模型建议是一个属性Slice B0.5 E1.0的被“切”掉一半的长方体,这样直接设置旋转量可以看出旋转效果。 以秒针为例,时分针类似。

//llSetRot函数设置旋转量,llGetWallclock()函数可获取当前服务器上时间(全部累加换算成秒,比如1:01:01就是3661,如需要具体时分秒需进行简单换算),数据是float?还是integer?
default
{
    state_entry()
    {
        llSetTimerEvent(0.3);
    }
    timer()
    {
        llSetRot(llEuler2Rot(<((integer)llGetWallclock()%60)*PI/30,0,0>));
        llSetTimerEvent(1);
    }
}

采蘑菇

在一定空间内彩色蘑菇到处漂移,找到并点击他,他就被抓住了。

  1. 建立蘑菇盘,记录其位置
  2. 创建蘑菇,注意连接
  3. 编辑脚本
//设置蘑菇变化的基本位置
vector gBase=<147,92,23>;//可以建立一个物体,然后设置位置
//random distance
float gDistance_x=5;
float gDistance_y=5;
float gDistance_z=1;
//time
integer gTimechange=4;
//装蘑菇的盘子位置
vector gContainer=<146.743,80.677,22.375>;
float gContainSize=0.5;
//communite channel
integer gCChannel=1;

default{
    state_entry(){
        llSetColor(<llFrand(1.0),llFrand(1.0),llFrand(1.0)>,ALL_SIDES);
        llSetLinkColor(LINK_ALL_OTHERS,<llFrand(1.0),llFrand(1.0),llFrand(1.0)>,ALL_SIDES);    
        llSetTimerEvent(gTimechange);
        llListen(gCChannel, "", "", "");
    }
    touch_start(integer num_detected){
        llSetTimerEvent(0);
        llSetPos(gContainer+<gContainSize*llFrand(gContainSize),gContainSize*llFrand(gContainSize),0>);
        llSay(0,"Oh,Bing Catched!");
    }
    timer(){
        llSetPos(gBase+<gDistance_x*llFrand(1.0),gDistance_y*llFrand(1.0),gDistance_z*llFrand(1.0)>);
    }
    listen( integer channel, string name, key id, string message ){
        if(message=="reset"){
            llResetScript();
        }
    }
}

坐在某个物体上

  1. 新建一个元件,设置点击行为为:坐下
  2. 在该物体中增加脚本:
default
{
    state_entry() 
    {
        llSitTarget(<0, 1.2, 1.2>, llEuler2Rot( <0.0, 0.0, 60.0> * DEG_TO_RAD ));
    }
}
  • <0, 1.2, 1.2>,设置坐的位置,相对于物体的中心。注意需要考虑人本身的中心位置。
  • llEuler2Rot( <0.0, 0.0, 60.0> * DEG_TO_RAD ),设置坐的方向,相对旋转。

开关门

  1. 建一个门轴和门面
  2. 链接两个模型,让门轴为根物体(最后选中的)
  3. 在根物体上建立以下脚本
integer vgIntDoorSwing = 90;
rotation vgRotDoorSwing; 
default{
  state_entry(){
    vgRotDoorSwing = llEuler2Rot( <0.0, 0.0, vgIntDoorSwing> * DEG_TO_RAD );
  } 
  touch_start( integer vIntTouched ){
    vgRotDoorSwing.s *= -1;
    llSetLocalRot( vgRotDoorSwing * llGetLocalRot());
  }
} 

粒子效果

  1. 参数解释,请参考API手册,也可以通过名字猜猜。
  2. 首先在场景中建立一个正方体,然后在其“内容”属性中,新建脚本,复制下面的代码即可;
  3. 要让粒子喷出指定的贴图,需要将贴图从资产库中拖到“内容”属性页下。
default {
    state_entry()
     {
        llSetAlpha(0.0, ALL_SIDES);
        llSetStatus(16,TRUE);
        llParticleSystem(  [ 
           PSYS_SRC_TEXTURE, llGetInventoryName(INVENTORY_TEXTURE, 0), //表示取得内容中的第一个材质,可以直接把资产库中的材质拖拽到内容中。
           PSYS_PART_START_SCALE, <0.25, 0.5, 0>, 
           PSYS_PART_END_SCALE, <0.25, 0.5, 0>, 
           PSYS_PART_START_COLOR, <0.856,0.723,0.203>,    
           PSYS_PART_END_COLOR, <0.856,0.203,0.234>, 
           PSYS_PART_START_ALPHA,  0.5,            
           PSYS_PART_END_ALPHA, 0.1,     
         
           PSYS_SRC_BURST_PART_COUNT, 7, 
           PSYS_SRC_BURST_RATE,  0.03,  
           PSYS_PART_MAX_AGE, 1.3, 
           PSYS_SRC_MAX_AGE, 0.0,  
        
           PSYS_SRC_PATTERN, 2,   // 1=DROP, 2=EXPLODE, 4=ANGLE, 8=ANGLE_CONE,

           PSYS_SRC_ACCEL, <0.0,0.0,-0.8>,  
           PSYS_SRC_BURST_RADIUS, 0.04,
           PSYS_SRC_BURST_SPEED_MIN, 2,   
           PSYS_SRC_BURST_SPEED_MAX, 2, 
           
           PSYS_SRC_TARGET_KEY, llGetOwner(),
           
           PSYS_SRC_ANGLE_BEGIN,  40*DEG_TO_RAD, 
           PSYS_SRC_ANGLE_END, 90*DEG_TO_RAD,  
           //  PSYS_SRC_OMEGA, <0,0,0>, 
        
           // PSYS_SRC_TARGET_KEY,      llGetLinkKey(llGetLinkNum() + 1),       
              
           PSYS_PART_FLAGS, ( 0      
                                | PSYS_PART_INTERP_COLOR_MASK   
                                | PSYS_PART_INTERP_SCALE_MASK   
                              | PSYS_PART_EMISSIVE_MASK   
                                | PSYS_PART_FOLLOW_VELOCITY_MASK
                             //   | PSYS_PART_WIND_MASK            
                             //   | PSYS_PART_BOUNCE_MASK        
                             // | PSYS_PART_FOLLOW_SRC_MASK     
                             // | PSYS_PART_TARGET_POS_MASK     
                             // | PSYS_PART_TARGET_LINEAR_MASK    
                       
            ) ] );
        }
    }