Вы находитесь на странице: 1из 4

PRÁCTICO • Second Life

Creando contenidos en Second Life

ÉSTA ES TU
(2DA.) VIDA

Lejos de ser una moda pasajera, Second Life se está convirtiendo en un nuevo escaparate que empresas, organiza-

ciones y hasta partidos políticos usan como nuevo medio para el marketing. El secreto de este mundo virtual está en

las posibilidades que ofrece a sus usuarios de modificar el entorno y crear nuevos contenidos.

POR ALBERTO GARCÍA SERRANO

S
econd Life es un mundo virtual en Nuestro Primer Script Default {
3D en el que podemos movernos e Un script LSL va asociado a un objeto, así // Eventos que puede manejar
interactuar con otros residentes que comenzaremos creando uno. Para // el objeto en este estado.
llamados avatares. La versión para Linux ello debemos estar conectados a Second }
se halla aún en fase alfa, sin embargo Life.
llevo ya algún tiempo usándola y es total- Buscaremos un lugar donde poder Listado 1: El Script por
mente estable. Lo que diferencia a Second crear objetos, por ejemplo, en la SandBox Defecto
Life de otros mundos virtuales es que per- de Help Island Public (142, 105, 26). Ele-
01 default
mite a sus residentes moldearlo a su giremos un lugar apartado y pulsaremos
gusto. Tanto es así que posee su propio el botón derecho del ratón sobre el suelo. 02 {
lenguaje de programación, gracias al cual En el menú de disco seleccionamos Crear. 03 state_entry()
podremos modelar cualquier comporta- Veremos una ventana como la de la
04 {
miento en los objetos que vayamos cre- Figura 1. Seleccionaremos prim cubo y lo
ando. LSL es el acrónimo de Liden Scrip- soltaremos sobre el suelo. Nos resta aso- 05 llSay(0, “Hello,
ting Language y tiene una sintaxis similar ciar un script LSL al cubo. Para ello pulsa- Avatar!”);
a C++ o Java. Sin embargo, el para- mos el botón Más>> y después la pes- 06 }
digma de programación que utiliza es taña Contenido. Aquí pulsamos el botón 07
bien distinto. Más que un lenguaje orien- Nuevo Script. SL acaba de crear el script
08 touch_start(integer
tado a objetos, podemos decir que es un del Listado 1. Para verlo, haremos doble
total_number)
lenguaje orientado a eventos. En realidad click sobre su nombre que, por defecto es
es similar a una máquina de estados en la New Script. La Figura 2 muestra la ven- 09 {
que definimos estados y respondemos a tana de edición de scripts. 10 llSay(0, “Touched.”);
los eventos pasando de un estado a otro. Este script tiene un solo estado: 11 }
En el cuadro 1 podemos ver con más Default. Un estado se define de la
12 }
exactitud cómo funciona. siguiente manera:

50 Número 33 WWW.LINUX- MAGAZINE.ES


Second Life • PRÁCTICO

En el caso concreto que estamos tra- de agentes (avatares) que están tocando
Listado 2: Estructuras de tando, la única acción que se realiza es el objeto.
Control mandar el mensaje “Hello, Avatar!” como
01 // condicional: if un mensaje de chat. Para eso usamos la El Lenguaje LSL
02 if (i==1) { función llSay. Esta función tiene el Como cualquier otro lenguaje, LSL tiene
siguiente formato: varios tipos de datos para declarar varia-
03 llSay (0, “i vale 1”);
bles.
04 } else { llSay (canal, “mensaje”); • Integer Representa un número entero
05 llSay(0, “i no vale 1”); entre -2.147.483.648 y 2.147.483.647.
06 } La función llSay envía un mensaje de chat Ejemplo: integer foo = 10;
que puede “oírse” en unos 20 metros a la • Float Representa un número decimal en
07
redonda. Tiene dos parámetros, el pri- punto flotante. El mayor positivo o
08 // Repetitiva: for
mero es el canal por el que queremos menor negativo representable con un
09 for (contador = 1; contador < transmitir el mensaje y el segundo, el float es +/-3.4028235e38, mientras que
10; contador++) { mensaje que queremos transmitir. el menor positivo o el mayor negativo
10 llSay (0, “cuenta: “ + El canal 0 es el canal público, es decir, es +/-1.17549351e-38. Ejemplo: float
(string)contador); que cualquiera podrá leer el mensaje. El bar = 10.5;
11 }
resto de canales, que van de 1 al • String Almacena una cadena de carac-
2.147.483.648, son privados, y suelen teres. Ejemplo: string saludo = “Hola”;
12
usarse para comunicar unos objetos con saludo = saludo + “ mundo”;
13 // Repetitiva: while otros y hacerlos funcionar de forma sin- • List Permite almacenar colecciones de
14 integer contador = 1; cronizada. cualquiera de los tipos soportados. Es
15 while (contador < 10) { Veamos ahora el evento touch_start. similar a los arrays. Ejemplo: list una-
lista = [“soy”, “una”, “lista”];
16 llSay (0, “cuenta: “ +
touch_start (integerU • Vector Representa un vector tridimen-
(string)contador);
total_number) sional en formato <X,Y,Z>. Puede
17 contador++; { representar una posición, una veloci-
18 } llSay(0, “Touched.”); dad, una aceleración o un color.
19 }
vector p = <1.0, 2.0, 3.0>;
20 // Repetitiva: do - while
La única diferencia con el evento anterior vector pos;
21 integer contador = 1; es que touch_start recibe un parámetro pos.x = 1.0;
22 do { llamado total_number, que es de tipo pos.y = 2.0;
23 llSay (0, “cuenta: “ + integer. Este parámetro indica el número pos.z = 3.0;
(string)contador);
24 contador++;
Listado 3: Estados y Funciones Propias
25 } while (contador < 10); 01 string estado; 18
02 19 touch_start(integer
Dentro de las llaves definiremos los even- 03 setEstado(string _estado) { total_number){
tos a los que queremos que nuestro 04 estado = _estado; 20 state apagado;
objeto sea capaz de responder. Nuestro
05 } 21 }
script tiene dos eventos definidos dentro
del estado Default: state_entry y 06 22 }
touch_start. El primero es un evento que 07 default { 23
se dispara de forma automática cuando el 08 state_entry() { 24 state apagado {
objeto entra en el estado. El segundo se
09 state apagado; 25 state_entry() {
dispara cuando un avatar cualquiera
toque nuestro objeto. Analicemos con 10 } 26 llSay(0, “Estoy apagado”);
más detalle cada evento. 11 } 27 setEstado(“apagado”);

12 28 }
state_entry()
13 state encendido { 29
{
llSay (0, “Hello, Avatar!”); 14 state_entry() { 30 touch_start(integer
} 15 llSay(0, “Estoy total_number){
encendido”); 31 state encendido;
Cuando un avatar se acerque al objeto, 16 setEstado(“encendido”); 32 }
éste entrará en el estado Default, y por lo
17 } 33 }
tanto se lanzará el evento state_entry.

WWW.LINUX- MAGAZINE.ES Número 33 51


PRÁCTICO • Second Life

Listado 4: Script de Teletransporte Listado 5: Script de


01 // Coordenadas de destino total_number) Rotación
02 vector target = <150,146,21>; 13 { 01 default {

03 default 02 state_entry() {
14 llSay(0,”Pulse el boton
04 { derecho del raton y seleccione 03
llTargetOmega(<0,0,1>,0.2,1.0
05 state_entry() Ir.”);
);
06 { 15
04 }
07 llSetSitText(“Ir”); 16 } 05 }
08 rotation 17
my_rot=llGetRot(); En el Cuadro 2 podemos ver ejemplos
18 changed(integer change)
09 de estas estructuras.
19 {
llSitTarget((target-llGetPos()
)/my_rot,ZERO_ROTATION/my_rot) 20 Crear Funciones y Estados
; llUnSit(llAvatarOnSitTarget()) Las funciones en LSL se declaran de
; forma similar a C. Declararemos los
10 }
parámetros de entrada entre paréntesis
11 21 }
y el de salida lo devolveremos con
12 touch_start(integer 22 } return.
También podemos crear estados pro-
pios usando la palabra reservada state.
• Rotation Representa una rotación en realizadas sobre él) . Ejemplo: rotation Vamos a verlo con el ejemplo del Lis-
formato <X,Y,Z,S>. Tiene formato de rot = <0.1, 2.5, 3.6, 1.0> tado 3, que usa estados y funciones pro-
quaternions, donde los tres primeros • Key Identificador único (UUID) que pias en el que, cada vez que se toque el
números forman un vector que indica tiene cada objeto dentro del mundo. objeto, cambiará entre el estado encen-
en qué ejes se aplicará la rotación, y el Incluido nuestro avatar. Ejemplo: key dido y apagado. En este caso hemos
cuarto es el ángulo de rotación en sí. En objeto = “00000000-0000-0000-0000-00 definido dos estados en el objeto: encen-
cualquier caso, si este vector no está 0000000000”; dido y apagado. También usamos state
normalizado, internamente se realizará Desde el punto de vista de las estructuras para cambiar de un estado a otro, tal y
una normalización (un vector está nor- de control, las de LSL son similares a las como se observa en el estado default del
malizado cuando su longitud, también de cualquier lenguaje como C o Java. Dis- Listado 3. Nada más entrar en él, hace-
llamado módulo, es 1, lo que facilita y ponemos de las estructuras clásicas de mos la transición al estado apagado.
agiliza las operaciones matemáticas control: if, for, while y do - while. Puede consultar el listado completo de
funciones, eventos y estados en [1].
Listado 6: Script de Movimiento
Algunos Ejemplos
01 vector centroRotacion; 14 integer i;
Vamos a ver algunos ejemplos. El pri-
02 default 15 while (TRUE) { mero, que se puede ver en el Listado 4,
03 { 16 { es un script de teletransporte. Puede
04 state_entry() usarse para transportar nuestro avatar a
17 vector actPos =
un punto cercano. En la Figura 3 se
05 { llGetPos();
puede observar un directorio que,
06 vector iniPos = 18 usando este script, permite transportar
llGetPos(); al visitante a una planta concreta de un
19 vector actOffset =
07 centroRotacion = iniPos + actPos - centroRotacion; edificio. Se utilizan las funciones llSit-
< 3, 3, 3 >; Target y llUnSit, que permiten sentar o
20 vector rotOffset =
08 }
levantar al avatar. En este caso se usa
actOffset * rotZ; un pequeño truco que consiste en sentar
09
21 vector newPos = al avatar en el punto al que queremos
10 touch_start(integer centroRotacion + rotOffset; viajar y seguidamente levantarlo. Se
total_number) hace así porque LSL no posee funciones
22
11 { de teletransporte entre distancias cortas
23 llSetPos( newPos ); (aunque sí para lugares distantes).
12 rotation rotZ =
24 } El Listado 5 muestra otro sencillo pero
llEuler2Rot( < 0, 0, 15 *
DEG_TO_RAD > ); 25 } interesante script que usa la función
llTargetOmega para hacer girar un
13 26 }
objeto sobre sí mismo.

52 Número 33 WWW.LINUX- MAGAZINE.ES


Second Life • PRÁCTICO

Por último, en el Listado 6 podemos


observar un script que nos muestra cómo
hacer que un objeto se mueva en el espa-
cio gracias a la función llSetPost. Este
script hace orbitar al objeto alrededor de
su eje Z.

Creación de Contenidos
Son múltiples los contenidos demandados
por los residentes de Second Life. Algunos
de ellos son muy valorados y se pagan
bien (Second life tiene su propia moneda,
llamada Liden Dollar, que puede cam-
biarse por dinero real). Vemos algunos
ejemplos.
Los vehículos son bastante valorados.
Sobre todo aquellos que imitan a vehícu-
los reales (con marcas y modelo concre-
tos). Para crear un vehículo hay que defi- Figura 1: Ventana de creación y edición de objetos.
nir sus propiedades físicas, que no serán
iguales en un coche, un barco o un avión. gestual. Por defecto, nuestro avatar tiene verso virtual, que no sólo se reducen al
Podemos obtener más información sobre una serie de animaciones predefinidas, plano mercadotécnico, sino que ofrecen
programación de vehículos en [4]. llamadas gestos. Además de estos gestos un importante potencial en el mundo de
El aspecto del avatar también puede ser podemos crear nuevas animaciones la educación. Ya se está diseñando mate-
modificado. En este sentido, la ropa cobra usando por ejemplo Blender, aunque hay rial didáctico basado en mundos virtuales
un papel importante. Podemos diseñar y programas mucho más sencillos diseña- 3D y ofreciendo cursos que se desarrollan
crear ropas para nuestro avatar. Para ello dos especialmente para Second Life como íntegramente dentro de Second Life. Hay,
usaremos unos patrones prediseñados qAvimator, que puede ser descargado de de hecho, un intento de integrar la plata-
que pueden ser descargados de la página [6] y tiene versión para Linux. forma Moodle con este universo virtual,
oficial de Second Life. Con esos patrones llamado Soodle, y del que puede obtener
y algún programa de diseño gráfico que Conclusiones más información en [7]. Empresas como
soporte capas, como The Gimp, podre- Algunos engloban ya a Second Life en lo Avata.es [2] ya han comenzado a prestar
mos comenzar a diseñar nuestra vesti- que se ha dado en llamar la WEB 3.0. Las servicios enfocados a este nuevo mer-
menta. Para obtener más información empresas empiezan a ver su potencial cado. ■
véase [5]. como escaparate al mundo. La interactivi-
Una vez dentro de Second Life, la dad y las posibilidades de Second Life RECURSOS
comunicación con los demás es impor- están más allá de las de la WEB actual, y
[1] Listado completo de funciones,
tante, y no sólo la verbal, que llevaremos aún sólo logramos imaginar vagamente
eventos y estados: http://wiki.
a cabo mediante chat, sino también la las posibilidades que nos ofrece este uni-
secondlife.com/wiki/LSL_Portal
[2] Educación en Second Life: http://
Cuadro 1: Eventos, Estados y Funciones
www.avata.es
Hemos dicho al principio del artículo que LSL es un lenguaje orientado a eventos. Esto
[3] Exprime Second Life. Ed. Anaya
quiere decir que nuestro programa no tiene un comportamiento determinista a priori.
En otras palabras, nuestro programa hará unas cosas u otras dependiendo de lo que Multimedia. ISBN: 978-84-415-2284-
ocurra a su alrededor (por ejemplo, que un avatar toque el objeto). 8

Estos eventos desencadenan acciones que modifican el comportamiento de los obje- [4] Programación de vehículos para
tos. Estos comportamientos se modelan mediante estados. Second Life: http://wiki.secondlife.
Podemos definir los estados que puede tener un objeto y cambiar de uno a otro. Por com/wiki/Category:LSL_Vehicle
ejemplo, si creamos una puerta que se abre automáticamente cuando alguien quiere [5] Cómo crear ropa en Second Life:
pasar, podemos definir dos estados: Abierta y Cerrada. En un principio nuestra puerta http://wiki.secondlife.com/wiki/
está cerrada, pero si alguien se acerca la puerta pasará al estado Abierta. En Second Clothing_Tutorials
Life todos los objetos deben tener al menos un estado por defecto llamado Default.
[6] Programa de creación de animacio-
Según el estado en que se encuentre el objeto realizará diferentes acciones. Estas accio-
nes qavimator: http://www.
nes se ejecutan mediante las Funciones predefinidas. En LSL hay cerca de 300 funcio-
qavimator.org/
nes predefinidas, cuya misión es permitir a nuestros objetos interactuar con el resto del
mundo. Por ejemplo, hay funciones para hacer que nuestro objeto emita mensajes a [7] Integración de Moodle con Second
través del chat o animarlo y darle movimiento. LSL también nos permite definir funcio- Life (Soodle): http://www.sloodle.
nes propias. org/

WWW.LINUX- MAGAZINE.ES Número 33 53

Вам также может понравиться