Recherche

Recherche personnalisée

dimanche 29 mars 2009

Tutorial 11 Les Sensor

Dans Second Life un avatar peut transporter de multiples objets. Une façon simple de le faire est l'attachement. Comme ce nom l'indique l'objet est alors intimement lié à l'avatar et se déplace avec lui. Cet objet doit être NonPhysical. Qu'est-ce que cela veut dire ? Vous avez peut être remarqué lorsque vous créez des objets dans SL qu'il y a des attributs "physiques", c'est à dire liés à la gravité, en quelque sorte ces attributs permettent de donner un mode de déplacement réaliste à l'objet, comme s'il était dans le monde réel. Un tel objet ne peux pas être attaché à un avatar. Vous savez certainement attacher un objet à partir de votre inventaire. Mais vous pouvez aussi le réaliser par script avec la fonction llAttachToAvatar. Cette fonction à un seul paramètre qui détermine le lieu de l'attachement, vous trouvez tous les renseignement ici :



http://www.lslwiki.net/lslwiki/wakka.php?wakka=llAttachToAvatar



En particulier la liste des constantes pour les localisations. Pour détacher un objet vous avez la fonction inverse llDetachFromAvatar.

Une autre façon de déplacer des objets avec un avatar et de tout simplement leur demander de le suivre. Vous avez sans douté repéré certains avatars avec un objet qui flotte derrière eux : oiseau, dragon, papillon et autres bestioles. Pour réaliser cela il existe une fonctionnalité nommée Sensor. C'est à dire une façon pour un objet de détecter la présence d'un autre objet, en l'occurrence un avatar dans notre cas. Le wiki n'est pas très loquace sur ce sujet :



http://www.lslwiki.net/lslwiki/wakka.php?wakka=sensors



Seulement 3 fonctions et 2 événements. Le seul objet des 3 fonctions est de déclencher l'événement sensor qui est l'élément principal :



http://www.lslwiki.net/lslwiki/wakka.php?wakka=sensor



Pour ce tutorial je vous propose un script tout simple que vous positionnez dans l'objet qui doit suivre votre avatar. Voici le code :



// Offset
vector offset = <-1,0,0>;
// Delai de recherche du proprietaire en secondes
float delai = .4;
// Distance de recherche en metres
float distance = 20;
// Angle de recherche en radians
float angle = PI_BY_TWO;
// Delai du deplacement en secondes
float deplacement = .3;

default
{
state_entry()
{
// Passage de l'objet en Physique, il a donc une masse
// et subit les lois de la gravitation
llSetStatus(STATUS_PHYSICS, TRUE);
// Petite attente de 0,1 seconde
llSleep(0.1);
// Recupration de la Key du proprietaire
key proprio = llGetOwner();
// Cherche la position du proprietaire
llSensorRepeat("", proprio, AGENT, distance, angle, delai);
}

sensor(integer total_number)
{
// Determination de la position du proprietaire
vector pos = llDetectedPos(0);
// Test de validite de la position
if (pos != <0,0,0>)
{
// Offset de positionnement
pos += offset;
// Deplacement de l'objet
llMoveToTarget(pos, deplacement);
}
}
}



A l'entrée dans le script (state_entry) la première instruction utilise la fonction llSetStatus. Cette fonction modifie les propriétés d'un objet. Par exemple on peut empêcher la rotation d'un objet sur un ou plusieurs axes. Vous trouvez tous les paramètres ici :



http://www.lslwiki.net/lslwiki/wakka.php?wakka=llSetStatus



Dans notre cas on se contente de définir l'objet comme physique pour que son déplacement soit réaliste. La fonction llSleep se contente d'introduire une temporisation. Nous avons déjà utilisé la fonction suivant qui récupère la Key de l'avatar. La fonction suivante llSensorRepeat est plus intéressante, c'est elle qui définit les paramètres du sensor :



http://www.lslwiki.net/lslwiki/wakka.php?wakka=llSensorRepeat



Cette fonction déclenche le sensor de façon répétitive. Elle possède plusieurs paramètres. Les trois premier permettent de déterminer l'objet à détecter : son nom, sa Key et son type. Les deux suivants concernent la zone de recherche : distance (range) et angle (arc). Le dernier paramètre définit la fréquence de la recherche en secondes. La plupars de ces paramètres ont été définis dans des variables globales pour une meilleure lisibilité du script.

L'événement sensor permet d'opérer la gestion du déplacement. Le paramètre de cet événement donne le nombre d'objets détectés dans la zone définie. Il ne nous est pas utile dans notre cas. La fonction suivante llDetectedPos fait partie du lot qui donne des informations sur les objets détectés :



http://www.lslwiki.net/lslwiki/wakka.php?wakka=detected



Vous constatez qu'il y en a un certain nombre. Nous nous contentons de déterminer la position de l'avatar puisque cette information nous suffit pour pouvoir suivre ses déplacements. Après avoir vérifié la validité de cette position on déplace l'objet avec la fonction llMoveToTarget qui permet de déplacer un objet physique. L'offset sert à déterminer le positionnement par rapport à l'avatar.

3 commentaires:

  1. Je suis vraiment fier de vous découvrir, votre blog est vraiment super ! J’aime bien son interface, et j’ai trop adoré le contenu aussi. Surtout continuez ainsi !
    voyance gratuite en ligne par mail

    RépondreSupprimer
  2. Merci pour cet article très complet encore une fois.
    voyance serieuse gratuite

    RépondreSupprimer
  3. Bravo pour votre site, je crois qu’il dépanne beaucoup de personnes, moi en tout cas il m’est très utile, continuez comme cela et bon courage !!!!
    voyance en ligne gratuite

    RépondreSupprimer