CRÉEZ VOTRE MONDE
Interagir avec des objets
Appliquer des véhicules aux personnages ZEPETO
21min
en appliquant le guide sur l'attachement d'objets aux personnages zepeto, vous pouvez implémenter des véhicules à conduire comme des voitures, des avions, des animaux de compagnie, etc , comme si le personnage les conduisait 📘 veuillez vous référer au guide suivant \[ attacher des objets aux personnages de zepeto docid\ lwymdrbf83eggcuikjznu ] configuration de l'animateur 1\) créez un contrôleur d'animateur en allant dans projet > créer > contrôleur d'animateur et renommez le en vehiclezepetoanimator 2\) dans l'onglet animateur, créez un état vide en sélectionnant créer état > vide 3\) renommez le de manière appropriée dans l'inspecteur et assignez des clips d'animation à motion pour utiliser vos fichiers de clips d'animation souhaités, référez vous au guide d'animation personnalisée 📘 veuillez vous référer au guide suivant \[ comment appliquer une animation personnalisée docid\ ij6n1lvynmnabqpn 67zd ] 4\) faites glisser et déposez vehiclezepetoanimator sur zepetoplayers pour le configurer 👍 conseils si la hauteur de la caméra doit changer en fonction de la taille du véhicule, vous pouvez présélectionner la valeur camera lookoffset dans zepetoplayers exemple de code 1\) créez un typescript en allant dans projet > créer > zepeto > typescript et renommez le en ridevehicle 2\) écrivez un script d'exemple comme indiqué ci dessous notez que les valeurs de transformation du véhicule dans cet exemple doivent être ajustées pour correspondre au prefab du véhicule lors de son application import { zepetoscriptbehaviour } from 'zepeto script'; import { zepetocharacter, zepetoplayers } from 'zepeto character controller'; import { transform, animator, gameobject, humanbodybones, object, vector3, quaternion } from 'unityengine'; export default class ridevehicle extends zepetoscriptbehaviour { public vehicleprefab gameobject; public bodybone humanbodybones; private localcharacter zepetocharacter; private vehicle gameobject; start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { // trouver le joueur local et le définir sur localcharacter this localcharacter = zepetoplayers instance localplayer zepetoplayer character; // obtenir le composant animateur de localcharacter const animator animator = this localcharacter zepetoanimator; // obtenir la position de l'os pour attacher l'objet const bone transform = animator getbonetransform(this bodybone); // créer le prefab du véhicule this vehicle = object instantiate(this vehicleprefab, bone) as gameobject; // définir la transformation du véhicule this vehicle transform localposition = new vector3(0 5, 0,0); this vehicle transform localrotation = quaternion euler(0, 0,90); }); } } 3\) après avoir terminé l'écriture du script, ajoutez le script à l'objet de jeu dans la scène 4\) dans l'inspecteur, assignez les ressources du prefab du véhicule et le bone du corps à attacher 5\) cliquez sur le bouton play, et vous verrez le personnage zepeto monter sur le véhicule 👍 conseils vous pouvez créer divers véhicules en changeant simplement le prefab du véhicule et les clips d'animation du personnage exemple de changement de taille lors de la consommation d'objets voici un exemple d'application amusante mettre en œuvre un contenu où la taille du personnage change lors de la consommation d'objets tout en montant sur un véhicule 1\) dans cet exemple, nous avons préparé deux types de prefabs et défini le tag des objets qui augmentent en taille lorsqu'ils sont consommés comme "augmenter" et les objets qui diminuent en taille comme "diminuer" 2\) ajoutez des colliders à chaque objet et assurez vous de cocher istrigger 3\) créez un typescript en allant dans projet > créer > zepeto > typescript et renommez le en changeobjectsize 4\) écrivez un script d'exemple comme indiqué ci dessous import { collider, gameobject, vector3 } from 'unityengine'; import { zepetoscriptbehaviour } from 'zepeto script'; export default class changeobjectsize extends zepetoscriptbehaviour { public vehicle gameobject; start() { } ontriggerenter(collider collider) { if (collider tag === "increase") { this gameobject transform localscale += new vector3(0 1, 0 1, 0 1); gameobject destroy(collider gameobject); } if (collider tag === "decrease") { const decreaseamount = new vector3(0 1, 0 1, 0 1); const newscale = this gameobject transform localscale decreaseamount; gameobject destroy(collider gameobject); // gestion des exceptions assurez vous que l'échelle ne devienne pas plus petite que (1, 1, 1) if (newscale x >= 1 && newscale y >= 1 && newscale z >= 1) { this gameobject transform localscale = newscale; } } } } la partie clé du code consiste à modifier le localscale pour changer la taille du personnage zepeto lorsqu'il touche chaque élément n'hésitez pas à ajuster les chiffres pour le changement de taille mais assurez vous de gérer les exceptions pour éviter que l'échelle ne devienne plus petite que (1,1,1) 5\) ce script doit être ajouté au personnage zepeto créé à l'exécution par conséquent, modifiez le script ridevehicle qui attache le véhicule comme suit import { zepetoscriptbehaviour } from 'zepeto script'; import { zepetocharacter, zepetoplayers } from 'zepeto character controller'; import { transform, animator, gameobject, humanbodybones, object, vector3, quaternion } from 'unityengine'; import changeobjectsize from ' /changeobjectsize'; export default class ridevehicle extends zepetoscriptbehaviour { public vehicleprefab gameobject; public bodybone humanbodybones; private localcharacter zepetocharacter; private vehicle gameobject; start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { // trouver le joueur local et le définir sur localcharacter this localcharacter = zepetoplayers instance localplayer zepetoplayer character; // obtenir le composant animateur de localcharacter const animator animator = this localcharacter zepetoanimator; // obtenir la position de l'os pour attacher l'objet const bone transform = animator getbonetransform(this bodybone); // créer le prefab du véhicule this vehicle = object instantiate(this vehicleprefab, bone) as gameobject; // définir la transformation du véhicule this vehicle transform localposition = new vector3(0 5, 0,0); this vehicle transform localrotation = quaternion euler(0, 0,90); // ajouter le script au charactercontroller const sizescript = this localcharacter gameobject addcomponent\<changeobjectsize>(); // ajouter le véhicule à l'inspecteur du script sizescript vehicle = this vehicle; }); } } le code pour ajouter le script changeobjectsize à l'exécution a été ajouté 6\) cliquez sur le bouton play, et vous verrez la taille du personnage changer chaque fois qu'il consomme un objet interagir avec les véhicules en appliquant le guide d'interaction, il est possible de monter dans un véhicule à un endroit souhaité après y avoir interagi 📘 veuillez vous référer au guide suivant \[ interagir avec un objet docid\ wd29obc1ipt0aindfyeaq ] configuration 1\) configurez l'objet dockpoint et le prefab ui sur votre prefab de véhicule de la même manière que dans le guide d'interaction 2\) dans l'éditeur unity, assurez vous que le bouton de bascule du gizmo de transformation en haut est réglé sur local, et faites le pivoter de sorte que l'axe z (flèche bleue) pointe vers l'extérieur de l'objet 3\) ajoutez un composant collider et cochez l'option istrigger 4\) ajustez la taille du collider à la portée dans laquelle le joueur peut interagir avec l'objet 5\) créez un objet vide comme enfant de dockpoint en allant dans hiérarchie > créer un objet vide, et renommez le en iconpos 6\) configure preficoncanvas de la même manière que le guide d'interaction des objets, puis transformez le en prefab 7\) étape supplémentaire créez un bouton de désengagement créez un bouton en tant qu'enfant de l'objet véhicule en allant dans hiérarchie > ui > bouton, et renommez le en bouton de désengagement ajout d'une animation d'embarquement au véhicule lorsqu'un personnage monte ou descend d'un véhicule, il a besoin d'une configuration d'animateur naturelle pour correspondre le guide ci dessous vous aidera à travers les paramètres de l'animateur nécessaires pour monter ou descendre référez vous au guide sur l'application d'animations personnalisées pour ajouter un état d'animation assise à votre animateur personnalisé 📘 veuillez vous référer au guide suivant \[ comment appliquer une animation personnalisée docid\ ij6n1lvynmnabqpn 67zd ] 1\) faites un clic droit sur l'état d'animation ajouté, cliquez sur faire une transition pour créer une transition de idle à sitting et de sitting à idle sélectionnez la transition créée et décochez l'option has exit time 2\) dans l'animateur personnalisé → paramètres → \[ + ], ajoutez une condition bool et renommez la en isriding 3\) pour la transition de l'état sitting à idle, cliquez sur conditions → \[ + ] et ajoutez la condition isriding avec l'option définie sur false 4\) pour la transition de l'état idle à sitting, cliquez sur conditions → \[ + ] et ajoutez la condition isriding avec l'option définie sur true script écrivez le script interactionicon ts, identique à celui du guide d'interaction, qui affiche l'interface utilisateur d'interaction lors de l'entrée dans la zone de déclenchement du prefab du véhicule ajoutez le script interactionicon zepeto écrit à l'objet dockpoint, et assignez pref icon canvas et icon position dans l'inspecteur référez vous à l'exemple ridevehicleexample ci dessous pour un code d'exemple sur la façon de monter dans le véhicule après avoir interagi avec l'interface utilisateur import { animator, gameobject, humanbodybones, physics, transform, vector3, waitforendofframe } from 'unityengine'; import { zepetoscriptbehaviour } from 'zepeto script'; import { zepetoplayers, zepetocharacter, characterstatemachine } from "zepeto character controller"; import { button } from 'unityengine ui'; import interactionicon from ' /interactionicon'; export default class ridevehicleexample extends zepetoscriptbehaviour { @serializefield() private bodybone humanbodybones; public isriding bool; public getoffbtn button; public vehicleobj gameobject; private interactionicon interactionicon; private localcharacter zepetocharacter; private playersittingposition vector3; private animator animator; private start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { this localcharacter = zepetoplayers instance localplayer zepetoplayer character; this animator = this localcharacter zepetoanimator; }); this interactionicon = this transform getcomponent\<interactionicon>(); this interactionicon onclickevent addlistener(() => { // lorsque l'icône d'interaction est cliquée, cachez l'icône et effectuez l'interaction this interactionicon hideicon(); this dointeraction(); }); // configurez l'événement de clic pour le getoffbtn (bouton pour sortir du véhicule) this getoffbtn onclick addlistener(() => { if(this isriding) { this stopinteraction(); this interactionicon showicon(); } }); this getoffbtn gameobject setactive(false); } //méthode pour effectuer la logique de conduite private dointeraction() { // définissez la valeur de transition de l'animator pour changer l'état d'animation actuel à l'état assis this animator setbool("isriding", true); this startcoroutine(this snapbone()); // pour corriger l'animation actuelle, désactivez l'animator this localcharacter statemachine constraintstateanimation = true; // définissez le parent de l'objet véhicule sur le personnage local this vehicleobj transform parent = this localcharacter transform; // activez le getoffbutton this getoffbtn gameobject setactive(true); this isriding = true; } private stopinteraction() { // définissez la valeur de transition de l'animator pour changer l'état d'animation à idle this animator setbool("isriding", false); // réactivez l'animator this localcharacter statemachine constraintstateanimation = false; this isriding = false; // définissez le parent de l'objet véhicule sur null this vehicleobj transform parent = null; // désactivez le getountbutton this getoffbtn gameobject setactive(false); } // coroutine pour snapper l'os au véhicule private snapbone() { const animator animator = this localcharacter zepetoanimator; const bone transform = animator getbonetransform(this bodybone); let idx = 0; while (true) { // calculez la distance entre l'os et la position du personnage const distance = vector3 op subtraction(bone position, this localcharacter transform position); const newpos vector3 = vector3 op subtraction(this transform position, distance); // mettez à jour la position assise du joueur et définissez la position et la rotation du personnage this playersittingposition = newpos; this localcharacter transform position = this playersittingposition; this localcharacter transform rotation = this transform rotation; yield new waitforendofframe(); idx++; // calibrez la position pendant 5 images d'animation if (idx > 5) { return; } } } } le déroulement du script est le suivant démarrer() lorsque l'icône est cliquée, this interactionicon est désactivé, et la fonction dointeraction() est appelée dointeraction() définir les valeurs de transition de l'animateur pour jouer l'animation assis démarrer la coroutine snap bone() pour attacher le bodybone du personnage zepeto au targettransform utiliser la fonction this localcharacter statemachine constraintstateanimation = true; pour désactiver la transition de l'animateur actuel, verrouillant l'animation en cours de lecture le parent de l'objet véhicule change pour le personnage zepeto le bouton descendre en haut à droite est activé stopinteraction() définir les valeurs de transition de l'animateur pour jouer l'animation idle réactiver la transition de l'animateur afin que l'animation appropriée soit jouée selon la situation définir le parent de l'objet véhicule sur null désactiver le bouton descendre this getoffbtn onclick la fonction stopinteraction() est appelée this interactionicon est activé ajoutez le script ridevehicleexample écrit à dockpoint, et assignez le bouton get off et le prefab du véhicule dans l'inspecteur \[▶︎(jouer)] appuyez sur le bouton de lecture pour essayer de monter dans le véhicule écran résultant 👍 conseils l'exemple ci dessus est un exemple de contenu non considéré pour la synchronisation multijoueur pour mettre en œuvre la synchronisation multijoueur, vous devez synchroniser des informations telles que le véhicule dans lequel chaque joueur monte, ainsi que la taille et l'emplacement du véhicule, comme l'état de la salle