TechTalk SecondLive, erste LSL-Schritte

In diesem Beitrag möchte ich einige Möglichkeiten von der Linden Scripting Language (kurz LSL) zusammenfassen. Dazu stelle ich im Anhang auch mein erstes Mini-Tutorial für Secondlife als PDF zum Download bereit.

In diesem, meinen ersten Secondlife-Techtalk möchte ich zeigen, wie einfach es ist, in Secondlife ein 3D-Objekt zu modellieren und es mit spezieller Funktionalität zu versehen. Modelliert wirdBlinkWand1 sozusagen „In-Game“, d.h. in Secondlife selbst. Es gibt, soweit mir bekannt, keine Möglichkeiten, einen „Offline-3D-Modeller“ zu verwenden oder gar Modelle zu importieren. Deshalb beziehen sich meine Ausführungen hier auf den „In-Game“-Modeller. Das Beispiel zeigt, wie man mit einfachen Mitteln ein kleine transparente Wand modellieren kann. Mittels LSL-Script habe ich meiner transparenten Wand folgende Funktionen hinzugefügt:

  1. Die Wand reagiert mit einem Text, wenn man sie berührt
  2. Die Wand blinkt alle 5 Sekunden in einer zufälligen Farbe
  3. Die Wand ist mit einem Sensor ausgestattet. Der Sensor ermittelt alle Avatare im näheren Umkreis und gibt die Namen der Avatare auf den Bildschirm aus.
  4. Ändert sich die Anzahl der sie umgebenden Avatare, spielt die Wand einen Sound ab

Modellierung

Create_Prim
Modelliert wird in Secondlife mit sogenannten Primitives, geometrischen Grundfiguren. Dies sind primitive 3D-Objekte aus deren Kombination die gesamte 3D-Welt gebaut ist. Ein Rechtsklick in die Welt öffnet ein Control-Element mit den Optionen „Sit Here“, „Go Here“, „Edit Terrain“, „About Land“ und „Create“. Wählt man „Create“ aus, erscheint die Oberfläche mittels der man 3D-Objekte modellieren kann. Von hier aus kann man Objekte in Secondlife bauen und verändern. Mit dem Zauberstab-Symbol („Create“) kann man 3D-Objekte erzeugen. Unter der Symbolleiste sieht man die Prims, 15 Stück an der Zahl. SL_Modelltools Aus dem Screenshot ist ersichtlich, dass ich hier als Prim den Cubus gewählt habe. Wenn man nun mit der Maus in die 3D-Welt navigiert, erscheint das Zauberstab-Symbol. Ein Klick auf die linke Maustaste erzeugt an dieser Stelle in der Welt ein Prim mit einer Standardtextur. Der Modeller wechselt dadurch direkt in den „Edit-Mode“, die Radio-Box steht auf Position. In der Abbildung sehen wir ein Cubus mit der gelben Standardtextur. Nun kann man den frisch erzeugten Cubus im Raum auf der X,Y und Z-Achse mit der Maus bewegen. Dies geschieht über die dafür vorgesehenen Pfeile am Objekt. Mit den roten Pfeilen bewegt man das Objekt entlang der X-Achse, mit den grünen Pfeil entlang der Y-Achse und mit den blauen Pfeilen entlang der Z-Achse. Prim Created
Das Objekt lässt sich nun rotieren und in seinen Dimensionen verändern. Die erreicht man durch klicken auf die Radio-Buttons „Rotate“ bzw. „Stretch“ oder durch das Halten der Ctrl-Taste (Rotate) bzw. Ctrl+Shift-Taste (Stretch).
Wand mit Textur
Mit ein wenig Fingerfertigkeit wird aus einem Cubus also eine Wand. Fehlt also nur noch ein wenig Transparenz und das Entfernen der Standardtextur. Befindet man sich im Edit-Modus kann man die Registerkarte „Texture“ wählen, rechts von „Features“ und links von „Content“.

Edit Texture 1 Mit einem Klick auf Color kann man die Grundfarbe des Prims verändern. Mit einem Klick auf Texture öffnet sich ein weiteres Fenster, in dem man die Standardtextur verändern kann. An dieser Stelle kann man eine 32×32 Pixel große Textur aus dem Inventory auf das 3D-Objekt legen. Für meine transparente „Zauberwand“ habe ich mittels „Blank“-Button die Standardtextur entfernt, da ich ja eine transparente Wand haben möchte. An dieser Stelle möchte ich erwähnen das man zwischen zwei Arten von Inventories unterscheiden muss: (a) dem Inventory des Avatars und (b) dem Inventory des Prims. Darauf möchte ich allerdings später im LSL-Teil dieses Artikels noch einmal zurückkommen. Möchte man nämlich aus der Scriptsprache LSL, z.B. auf Texturen, Sounds etc. zugreifen, ist dies nur auf das Prim-Inventory möglich (!)

Edit Texture 2

Last but not Least, kann man noch die Transparenz des Objektes zwischen 0 und 100 wählen, unter Transparency im Edit-Mode. Dies könnt ihr im nächsten Screenshot sehen, eine magentafarbene „Zauberwand“. Wand Transparent
Im nächsten Schritt möchte ich diesem einfachen 3D-Objekt noch etwas Magie hinzufügen. Sie soll auf Berührung reagieren, in zufälligen Farben im Abstand von 5 Sekunden blinken und die Umgebung auf neugierige Avatare scannen. Und einen Sound abspielen, sobald sich ihr ein neuer Avatar nähert. All dies geht mit LSL, der Linden Scripting Language.

LSL-Programmierung

Als Voraussetzung, um in LSL programmieren zu können sind natürlich Programmierkentnisse aus anderen Sprachen von Vorteil. Wer sich also schon einmal in einer Hochsprache wie C/C++ oder Java bewegt hat, wird es relativ einfach haben. LSL ist allerdings keine Programmiersprache im Sinne der Objektorientierung mit Polymorphismus und Vererbung etc. Man sollte also nicht zuviel von LSL erwarten. Ein gutes Wiki zum Thema LSL habe ich hier gefunden. Weitere gute LSL-Beispiele habe ich unter http://www.kan-ed.org/second-life/using-LSL.html gefunden. Im Edit-Mode unter der Registerkarte „Content“ ist das Prim-Inventory erreichbar. Script Screenshot

An dieser Stelle ist es auch möglich, eigene LSL-Scripte zu schreiben, die an das 3D-Objekt gebunden sind. LSL ist dabei eventgesteuert. Es gibt zahlreiche Events, wie z.B. das touch_start-Event.

touch_start-Event

Nachfolgender Code wird ausgeführt, wenn der Prim mit der linken Maustaste angeklickt wird.
    touch_start(integer total_number)
    {
        float red1 = llFrand(1);
        float green1 = llFrand(1);
        float blue1 = llFrand(1);
        vector color1 = ;

        llSay(0, "angefasst." + (string)total_number);
                
        llSetText("die ist ein test", color1, 1.0);
        llSetTimerEvent(5);
    }
LSL-Script

Damit wir alle 5 Sekunden ein weiteres Stück Code ausführen können, habe ich mit der llSetTimerEvent()-Funktion den Timer gesetzt. Dieser Aufruf führt dazu, das alle 5 Sekunden die Funktion timer() aufgerufen wird.

timer()

Mein Timer berechnet alle 5 Sekunden einen neuen Farbvektor mit Zufallsfarbwerten und verändert die Farbe der Wand auf allen Seiten. Außerdem aktiviert mein Timer alle 5 Sekunden das Sensor-Objekt, welches im näheren Umkreis alle Avatare scannt. Dies geschieht über den Aufruf der Funktion llSensor().
    timer()
    {   
        float red = llFrand(1);
        float greed = llFrand(1);
        float blue = llFrand(1);
        vector color = ;
        llSetColor(color, ALL_SIDES);
        llSensor("", NULL_KEY, AGENT, 96, PI);
        llSay(0, "timer");
    }    
LSL-Script

Findet mein Sensor Avatare in er Nähe wird der Event-Handler sensor() (bzw. die Callback-Funktion) aufgerufen.

sensor()

Werden Avatare entdeckt, werden die Namen aller Avatare in einer Schleife mit der Funktion llDetectedName() ausgegeben. Wenn sich die Anzahl der Avatare zwischen zwei Senoraufrufen ändert, wird zusätzlich ein Sound abgespielt mit der Funktion llPlaySound().


    sensor(integer total_number)
    {
        if(total_number!=numOfDetectedObj)
        {
               llPlaySound("Soundtrack",1);
                numOfDetectedObj=total_number;
        }
        integer i =0;
        for(i=0; i<total_number; i++)
            {
                string s = llDetectedName(i);
                llSay(0,"something found by sensor = " + s);
            }
            
    }
LSL-Script

Die Funktion llPlaySound() erhält als ersten Parameter „Soundtrack“. Hierbei handelt es sich um einen symbolischen Namen eines Audioobjektes, welches über das Prim-Inventory erreichbar sein muss. Man kann aus dem Avatar-Inventory Objekte in das Prim-Inventory via Drag & Drop ziehen.
Das war es dieses Mal. Das Tutorial werde ich demnächst als PDF bereitstellen. Viel Spaß beim ausprobieren mit LSL.

Downloads


ScriptIcon
Hier das komplette LSL-Script zum downloaden.

Über Andreas Mertens

Andreas Mertens aka Patrick Wunderland (SL) ist Initiator von avameo und schreibt seit 2006 für diesen Blog.

Kommentare

  1. Omar says:

    script funktioniert nicht, krieg nen syntax error

  2. andreas.mertens says:

    An welcher Stelle denn? Meist kommt ja noch eine Fehlermeldung oder der Cursor bleibt im Editor an der Stelle stehen, an dem das LSL-Script nicht kompiliert werden kann! Wichtig ist, das in deinem Prim-Inventory ein Sound mit dem Namen „Soundtrack“ existiert !!!!

    Beste Grüße,

    Andreas alias Patrick Wunderland

  3. Ricarda Wedhorn says:

    sehr schön beschrieben, bin begeistert, jetzt kapier sogar ich das :)

  4. andreas.mertens says:

    Vielen Dank für die Blumen, das tut gut :-)

    pW

  5. Doro alias Morgana Jacobus says:

    Endlich mal eine Seite, bei der man auch was versteht und umsetzen kann :-)…. Ich hab aber noch eine Frage; bin neu im SL; wie bekomme ich Gegenstände in die Box hinein und sehe dann im Inhalt auch was drin ist??? Egal ich nun Schuhe oder eine Yacht verpacken will…. Jaja, Fragen über Fragen, aber das ist ja auch das interessante am SL. Liebe Grüße Doro alias Morgana :-))))

  6. andreas.mertens says:

    Ganz einfach. Per Drag & Drop vom Avatar-Inventory in das Prim-Inventory ziehen !!!

    Grüße,

    Andreas Patrick Wunderland Mertens

  7. jonny says:

    cooooooooooooooooool man.

  8. Ludger Schultze says:

    Hallo Andreas
    Interessant hier ,ist alles hochkomplex im Sl
    Trotz einigermaßen Englischkenntniss ,war es noch nicht leicht dahinter zu kommen,wie das alles functioniert.Aber meine Frage :Gibt es auch ein Tutorial in Deutsch über die Scriptsprache.
    Ich habe schon in Turbo Pascal programiert ,aber die syntax ist immer etwas anders
    Oder wirst du sowas noch mal starten?
    Gruß
    Ludger

  9. Lieber Ludger,

    ich kenne bisher kein englisch- bzw. deutschschprachiges gutes Tutorial, welches ich empfehlen könnte, dass LSL umfassend behandelt. Am besten finde ich persönlich das WIKI, welches wir verlinkt haben.

    Gruss,

    Andreas

  10. Klaus Meier says:

    Habe die deutsche Übersetzung zu dem von euch verlinktem Wiki gefunden:
    http://wiki.slinfo.de/wakka.php?wakka=HomePage
    Ist gut gemacht.

    Gruß
    Klaus

Trackbacks

  1. […] (Kurzeinführung in LSL und Modellierung von Objekten in SL) […]

  2. […] LSL Wiki. 16. März 2007 (HTML, Abgerufen am 16.3). ↑ http://www.slinfo.de/wiki↑ http://blog.avameo.de/index.php/2006/11/28/techtalk-secondlive-erste-lsl-schritte LSL Tutorial auf Avameo zu der Sensor-Funktionalität. 16. März 2007 (HTML, Abgerufen am […]

Ihre Meinung ist uns wichtig

*