สร้างโลกของคุณเอง
ผู้เล่นและตัวละคร: เคล็ดลับ
การเปลี่ยนสีตัวละคร ZEPETO และสีของไอเท็มที่สวมใส่
7นาที
คู่มือนี้มีเป้าหมายเพื่อช่วยในการสร้างเนื้อหาที่น่าสนใจ การเปลี่ยนสีของตัวละคร zepeto ตัวละคร zepeto ถูกสร้างขึ้นในระหว่างการทำงานเป็นวัตถุ zepetocharacter หากคุณตรวจสอบโครงสร้างของ zepetocharacter คุณจะพบวัตถุย่อยชื่อ zepeto context ภายใน zepeto context ยังมีวัตถุอีกชื่อหนึ่งชื่อ body โดยการแทนที่วัสดุ body(clone) ของวัตถุ body ในระหว่างการทำงานโดยใช้สคริปต์ คุณสามารถเปลี่ยนสีของตัวละคร zepeto ได้ สำหรับอวตารที่ไม่เคลื่อนไหว วิธีนี้จะเปลี่ยนสีของทั้งใบหน้าและร่างกาย อย่างไรก็ตาม สำหรับอวตารที่เคลื่อนไหว คุณต้องแก้ไขวัสดุ body(clone) ของ anime basemodel ซึ่งเป็นลูกของวัตถุ body โปรดทราบว่าการแทนที่วัสดุสามารถทำได้ด้วยอาร์เรย์วัสดุที่มีความยาวเท่ากัน 📘 วัสดุของ unity https //docs unity3d com/2020 3/documentation/manual/materials html https //docs unity3d com/2020 3/documentation/manual/materials html ด้านล่างนี้คือตัวอย่างโค้ดที่เปลี่ยนสีพื้นหลังของผู้เล่นท้องถิ่น โปรดตรวจสอบให้แน่ใจว่ามีการดำเนินการตรรกะเพื่อให้สีของตัวละครเปลี่ยนเฉพาะหลังจากที่ตัวละครโหลดเสร็จแล้ว 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() { // ค้นหาผู้เล่นท้องถิ่นและตั้งค่าให้กับ localcharacter zepetoplayers instance onaddedlocalplayer addlistener(() => { this localcharacter = zepetoplayers instance localplayer zepetoplayer character; // ค้นหาวัสดุของบริบท zepeto ของผู้เล่นท้องถิ่น this bodyrend= this localcharacter context getcomponentinchildren\<skinnedmeshrenderer>(); // เก็บวัสดุเดิม this originalcolormaterial = this bodyrend material; // กำหนดว่ามันเป็นอวตารที่เคลื่อนไหวและบันทึกข้อมูลที่เกี่ยวข้อง this bodyrends= this localcharacter getcomponentsinchildren\<skinnedmeshrenderer>(); this bodyrends foreach((currentrenderer) =>{ if(currentrenderer name includes("anime basemodel")){ this animerend = currentrenderer; this originalanimematerials = this animerend sharedmaterials; } }); }); // แทนที่ด้วยวัสดุที่ตั้งไว้เมื่อปุ่มถูกกด 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; } } }); // กลับไปยังวัสดุเดิมเมื่อปุ่มถูกกด this originalcolorbutton onclick addlistener(() => { if(this localcharacter != null) { this bodyrend material = this originalcolormaterial; if(this animerend != null) { this animerend sharedmaterials = this originalanimematerials; } } }); } } การเปลี่ยนแปลงวัสดุของร่างกายอาจทำให้การแต่งหน้าของอวตาร zepeto ไม่แสดงอย่างถูกต้อง การเปลี่ยนสีของรายการที่สึกหรอ รายการที่สึกหรอจะถูกสร้างเป็นวัตถุย่อยภายใต้วัตถุหลัก คุณสามารถตรวจสอบวัสดุที่ใช้สำหรับแต่ละรายการจากส่วนวัสดุของวัตถุรายการ โดยการเปลี่ยนวัสดุในระหว่างการทำงานโดยใช้สคริปต์ คุณสามารถเปลี่ยนสีของรายการได้ ด้านล่างนี้คือตัวอย่างโค้ดที่เปลี่ยนสีของรายการแรกที่สวมใส่โดยผู้เล่นท้องถิ่น ตรวจสอบให้แน่ใจว่าสีของรายการจะถูกเปลี่ยนเฉพาะหลังจากที่ตัวละครโหลดเสร็จแล้ว 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() { // ค้นหาผู้เล่นท้องถิ่นและตั้งค่าให้กับ localcharacter zepetoplayers instance onaddedlocalplayer addlistener(() => { this localcharacter = zepetoplayers instance localplayer zepetoplayer character; // เข้าถึงร่างกายของบริบท zepeto ของผู้เล่นท้องถิ่น this body = this localcharacter context getcomponentinchildren\<skinnedmeshrenderer>() gameobject; // เข้าถึงวัสดุของรายการแรกในร่างกาย this itemrend = this body transform getchild(0) getcomponent\<skinnedmeshrenderer>(); // เก็บวัสดุเดิม this originalcolormaterial = this itemrend material; }); // แทนที่ด้วยวัสดุที่ตั้งไว้เมื่อปุ่มถูกกด this changecolorbutton onclick addlistener(() => { if(this localcharacter != null) { this itemrend material = this newcolormaterial; } }); // กลับไปยังวัสดุเดิมเมื่อปุ่มถูกกด this originalcolorbutton onclick addlistener(() => { if(this localcharacter != null) { this itemrend material = this originalcolormaterial; } }); } } คำอธิบายโค้ด this body transform getchild(0) หมายถึงรายการแรกในรายการที่สวมใส่, คือรายการที่อยู่ที่ดัชนี 0 คุณสามารถปรับเปลี่ยนสิ่งนี้เพื่อเปลี่ยนสีของรายการที่สวมใส่อื่น ๆ ได้ สำหรับรายการที่ใช้วัสดุหลายชนิด, โปรดจำไว้ว่าการแทนที่วัสดุต้องการอาร์เรย์วัสดุที่มีความยาวเท่ากัน การเปลี่ยนสีของตัวละคร zepeto ทั้งสองตัวและรายการทั้งหมด โดยการใช้ข้อมูลเชิงลึกที่เราได้รับจนถึงตอนนี้ คุณสามารถปรับสีของตัวละครและรายการทั้งหมดให้เหมือนกันได้ นี่คือตัวอย่างโค้ดที่เปลี่ยนสีของตัวละครและสีของไอเท็มของผู้เล่นท้องถิ่นทั้งหมดเมื่อคลิกที่ปุ่ม "เปลี่ยนสี" และกลับไปที่สีเดิมเมื่อคลิกที่ปุ่ม "สีเดิม" 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() { // ค้นหาผู้เล่นท้องถิ่นและตั้งค่าให้กับ localcharacter zepetoplayers instance onaddedlocalplayer addlistener(() => { this localcharacter = zepetoplayers instance localplayer zepetoplayer character; // บันทึกเพื่อเก็บวัสดุเดิม 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]); } }); }); // แทนที่ด้วยวัสดุที่ตั้งไว้เมื่อปุ่มถูกกด 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; }); } }); // กลับไปที่วัสดุเดิมเมื่อปุ่มถูกกด 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; }); } }); } } วิธีนี้ไม่เพียงใช้ได้กับผู้เล่นท้องถิ่น แต่ยังใช้ได้กับตัวละคร zepeto ใด ๆ ที่สร้างขึ้นในระหว่างการทำงาน รวมถึงตัวละคร npc ด้วย อย่าลังเลที่จะใช้ความคิดสร้างสรรค์และนำไปใช้ในวิธีที่สนุกสนาน!