CRÉEZ VOTRE MONDE
Joueurs & Personnages : Consei...
Modification de la couleur du personnage ZEPETO et de la couleur des objets portés
8min
ce guide vise à aider à créer un contenu engageant changer la couleur des personnages zepeto les personnages zepeto sont instanciés à l'exécution en tant qu'objet zepetocharacter si vous inspectez la structure de zepetocharacter, vous trouverez un sous objet nommé zepeto context plus loin dans zepeto context, il y a un autre objet nommé body en remplaçant le matériau body(clone) de l'objet body à l'exécution à l'aide de scripts, vous pouvez changer la couleur du personnage zepeto pour les avatars non animés, cette approche change la couleur de l'ensemble du visage et du corps cependant, pour les avatars animés, vous devez également modifier le matériau body(clone) du anime basemodel, qui est un enfant de l'objet body veuillez noter que les remplacements de matériaux sont réalisables avec des tableaux de matériaux de la même longueur 📘 matériaux unity https //docs unity3d com/2020 3/documentation/manual/materials html https //docs unity3d com/2020 3/documentation/manual/materials html voici un exemple de code qui change la couleur du corps du joueur local assurez vous d'implémenter la logique afin que la couleur du personnage ne change qu'après que le personnage a été chargé import { zepetoscriptbehaviour } from 'zepeto script' import {localplayer, spawninfo, zepetocharacter, zepetocharactercreator, zepetoplayers} from "zepeto character controller"; import {zepetopropertyflag} from "zepeto"; import { gameobject, material, renderer, skinnedmeshrenderer, transform, waitforseconds } from 'unityengine'; import { button } from 'unityengine ui'; export default class changeskincolor extends zepetoscriptbehaviour { public newcolormaterial material; public changecolorbutton button; public originalcolorbutton button; private originalcolormaterial material; private originalanimematerials material\[]; private animerend renderer; private bodyrend renderer; private bodyrends renderer\[]; private localcharacter zepetocharacter; start() { // trouver le joueur local et le définir à localcharacter zepetoplayers instance onaddedlocalplayer addlistener(() => { this localcharacter = zepetoplayers instance localplayer zepetoplayer character; // trouver le matériau du contexte zepeto du joueur local this bodyrend= this localcharacter context getcomponentinchildren\<skinnedmeshrenderer>(); // stocker le matériau original this originalcolormaterial = this bodyrend material; // déterminer s'il s'agit d'un avatar animé et sauvegarder les informations connexes this bodyrends= this localcharacter getcomponentsinchildren\<skinnedmeshrenderer>(); this bodyrends foreach((currentrenderer) =>{ if(currentrenderer name includes("anime basemodel")){ this animerend = currentrenderer; this originalanimematerials = this animerend sharedmaterials; } }); }); // remplacer par le matériau prédéfini lorsque le bouton est pressé this changecolorbutton onclick addlistener(() => { if(this localcharacter != null) { this bodyrend material = this newcolormaterial; if(this animerend != null) { let tempmaterials material\[] = \[this animerend sharedmaterials\[0],this animerend sharedmaterials\[1],this newcolormaterial,this animerend sharedmaterials\[3]]; this animerend sharedmaterials = tempmaterials; } } }); // retourner au matériau original lorsque le bouton est pressé this originalcolorbutton onclick addlistener(() => { if(this localcharacter != null) { this bodyrend material = this originalcolormaterial; if(this animerend != null) { this animerend sharedmaterials = this originalanimematerials; } } }); } } modifier le matériau du corps peut entraîner un affichage incorrect du maquillage de l'avatar zepeto changer la couleur des objets usés les objets usés sont instanciés en tant que sous objets sous l'objet corps vous pouvez vérifier le matériau appliqué pour chaque objet dans la section matériaux de l'objet en remplaçant les matériaux à l'exécution à l'aide de scripts, vous pouvez changer la couleur des objets ci dessous un exemple de code qui change la couleur du premier objet porté par le joueur local assurez vous que la couleur de l'objet est changée uniquement après que le personnage a été chargé import { zepetoscriptbehaviour } from 'zepeto script' import {localplayer, zepetocharacter, zepetoplayers} from "zepeto character controller"; import { gameobject, material, renderer, skinnedmeshrenderer, transform, waitforseconds } from 'unityengine'; import { button } from 'unityengine ui'; export default class changeskincolor extends zepetoscriptbehaviour { public newcolormaterial material; public changecolorbutton button; public originalcolorbutton button; private originalcolormaterial material; private body gameobject; private itemrend renderer; private localcharacter zepetocharacter; start() { // trouver le joueur local et le définir à localcharacter zepetoplayers instance onaddedlocalplayer addlistener(() => { this localcharacter = zepetoplayers instance localplayer zepetoplayer character; // accéder au corps du contexte zepeto du joueur local this body = this localcharacter context getcomponentinchildren\<skinnedmeshrenderer>() gameobject; // accéder au matériau du premier objet enfant du corps this itemrend = this body transform getchild(0) getcomponent\<skinnedmeshrenderer>(); // stocker le matériau original this originalcolormaterial = this itemrend material; }); // remplacer par le matériau prédéfini lorsque le bouton est pressé this changecolorbutton onclick addlistener(() => { if(this localcharacter != null) { this itemrend material = this newcolormaterial; } }); // retourner au matériau original lorsque le bouton est pressé this originalcolorbutton onclick addlistener(() => { if(this localcharacter != null) { this itemrend material = this originalcolormaterial; } }); } } explication du code this body transform getchild(0) fait référence au premier objet parmi les objets portés, c'est à dire l'objet à l'index 0 vous pouvez adapter cela pour changer la couleur d'autres objets portés pour les objets utilisant plusieurs matériaux, rappelez vous que les remplacements de matériaux nécessitent des tableaux de matériaux de la même longueur changer la couleur des personnages zepeto et de tous les objets en tirant parti des informations que nous avons acquises jusqu'à présent, vous pouvez modifier la couleur à la fois du personnage et de tous les objets de manière uniforme voici un code d'exemple qui modifie complètement la couleur du personnage et des objets du joueur local lorsque le bouton "changer de couleur" est cliqué et revient à l'original lorsque le bouton "couleur originale" est cliqué import { zepetoscriptbehaviour } from 'zepeto script' import {localplayer, zepetocharacter, zepetoplayers} from "zepeto character controller"; import { gameobject, material, renderer, skinnedmeshrenderer, transform, waitforseconds } from 'unityengine'; import { button } from 'unityengine ui'; export default class changeallmaterial extends zepetoscriptbehaviour { public newcolormaterial material; public changecolorbutton button; public originalcolorbutton button; private originalmaterials material\[] = new array(); private bodyrends renderer\[]; private localcharacter zepetocharacter; start() { // trouver le joueur local et le définir à localcharacter zepetoplayers instance onaddedlocalplayer addlistener(() => { this localcharacter = zepetoplayers instance localplayer zepetoplayer character; // sauvegarder pour garder les matériaux originaux this bodyrends= this localcharacter getcomponentsinchildren\<skinnedmeshrenderer>(); this bodyrends foreach((currentrenderer) =>{ for(let i=0; i\<currentrenderer sharedmaterials length;i++){ this originalmaterials push(currentrenderer sharedmaterials\[i]); } }); }); // remplacer par le matériau prédéfini lorsque le bouton est pressé this changecolorbutton onclick addlistener(() => { if(this localcharacter != null) { this bodyrends foreach((currentrenderer) =>{ let tempmaterials material\[] = new array(); for(let i=0; i\<currentrenderer sharedmaterials length;i++){ tempmaterials push(this newcolormaterial); } currentrenderer sharedmaterials = tempmaterials; }); } }); // retourner au matériau original lorsque le bouton est pressé this originalcolorbutton onclick addlistener(() => { if(this localcharacter != null) { let indexnum = 0; this bodyrends= this localcharacter getcomponentsinchildren\<skinnedmeshrenderer>(); this bodyrends foreach((currentrenderer) =>{ let tempmaterials material\[] = new array(); for(let i=0; i\<currentrenderer sharedmaterials length;i++){ tempmaterials push(this originalmaterials\[indexnum]); indexnum++; } currentrenderer sharedmaterials = tempmaterials; }); } }); } } cette méthode est applicable non seulement au joueur local, mais aussi à tous les personnages zepeto créés à l'exécution, y compris les personnages npc n'hésitez pas à faire preuve de créativité et à l'appliquer de manière amusante !