สร้างโลกของคุณเอง
ผู้เล่นและตัวละคร: ขั้นสูง
การใช้เหตุการณ์แอนิเมชัน
13นาที
เหตุการณ์อนิเมชันให้วิธีการเรียกฟังก์ชันที่กำหนดเองหรือดำเนินการในเวลาที่เฉพาะเจาะจงในคลิปอนิเมชัน สิ่งนี้ช่วยให้มีการโต้ตอบระหว่างอนิเมชันและสคริปต์ และมีประโยชน์เมื่อดำเนินการในเวลาที่แน่นอนของอนิเมชัน การเพิ่มเหตุการณ์ในอนิเมชันของวัตถุ ตัวอย่างต่อไปนี้เพิ่มเหตุการณ์อนิเมชันให้กับวัตถุที่มีการอนิเมชัน โครงสร้างนี้จะส่งข้อมูลไปยังบันทึกคอนโซลเมื่อใดก็ตามที่มีการดำเนินการเหตุการณ์โดยการเพิ่มเหตุการณ์ขึ้นและเหตุการณ์ลงในอนิเมชันที่ทำซ้ำขึ้นและลง 1\) เลือก gameobject > 3d object > cube เพื่อสร้างลูกบาศก์ในฉาก เลือกลูกบาศก์ที่สร้างขึ้นและเพิ่มคอมโพเนนต์ animator โดยคลิกที่ปุ่ม add component ในแผง inspector นำเข้า animator controller ของลูกบาศก์ไปยัง animator ที่เพิ่มเข้าไป นำเข้าแอนิเมชันคลิปของลูกบาศก์ไปยังจุดเริ่มต้นของ animator controller ของลูกบาศก์เพื่อให้แอนิเมชันของลูกบาศก์สามารถเล่นได้เมื่อฉากถูกเล่น กรุณาอ้างอิงคู่มือด้านล่างสำหรับการลงทะเบียน animator และการแก้ไขแอนิเมชันคลิป 📘 คู่มือเหตุการณ์แอนิเมชัน unity https //docs unity3d com/kr/current/manual/script animationwindowevent html https //docs unity3d com/kr/current/manual/script animationwindowevent html 📘 บทเรียนแอนิเมชัน unity https //learn unity com/tutorial/may 18 animation?language=en# https //learn unity com/tutorial/may 18 animation?language=en# 2\) เพิ่มคุณสมบัติต่อไปนี้ในคลิปแอนิเมชันของลูกบาศก์ มีเฟรมหลักของตำแหน่ง (x 0, y 0, z 0) ในช่วง 0 วินาที, 2 วินาทีของคลิปแอนิเมชันของลูกบาศก์ มีเฟรมหลักของตำแหน่ง (x 0, y 1, z 0) ในช่วง 1 วินาทีของคลิปแอนิเมชันของลูกบาศก์ (1) ลงทะเบียนเหตุการณ์แอนิเมชันในช่วง 1 วินาทีของคลิปแอนิเมชันของลูกบาศก์ ฟังก์ชัน เรียกใช้ สตริง ขึ้น (2) ลงทะเบียนเหตุการณ์แอนิเมชันในช่วง 2 วินาทีของคลิปแอนิเมชันของลูกบาศก์ ฟังก์ชัน เรียกใช้ สตริง ลง เมื่อเขียนเหตุการณ์อนิเมชันผ่าน c# ใน unity ให้เขียนชื่อฟังก์ชันใน function อย่างไรก็ตาม เพื่อเรียกเหตุการณ์อนิเมชันใน typescript ต้องเขียน invoke ใน funtion และชื่อฟังก์ชันต้องเขียนใน string ซึ่งเป็นค่าของอาร์กิวเมนต์ 3\) สร้างโปรเจกต์ > สร้าง > zepeto > typescript และเปลี่ยนชื่อเป็น objectanimationcontroller เขียนสคริปต์ตัวอย่างตามด้านล่าง objectanimationcontroller ts import { zepetoscriptbehaviour } from 'zepeto script' export default class objectanimationcontroller extends zepetoscriptbehaviour { public up() { console log(`cube is up`); } public down(){ console log(`cube is down`); } } 4\) หากคุณกดปุ่มเล่นเพื่อรัน คุณจะเห็นการแสดงผลในคอนโซลในขณะที่อนิเมชันของลูกบาศก์กำลังเล่นอยู่ เล่นเสียงฝีเท้าด้วยการใช้เหตุการณ์อนิเมชันบนตัวละครในท้องถิ่น เพื่อเพิ่มเหตุการณ์อนิเมชันไปยัง animator ของตัวละคร zepeto เหตุการณ์ต้องถูกเพิ่มในระหว่างการทำงาน เมื่อสร้างตัวละคร ตัวอย่างต่อไปนี้ใช้เหตุการณ์กับ animation clip เฉพาะของ animator ผู้เล่นในท้องถิ่นในระหว่างการทำงาน และเล่นเสียงฝีเท้าขณะเกิดเหตุการณ์ 1\) สร้างสคริปต์ footstepcontroller ที่จะถูกนำไปใช้กับวัตถุ animator ของผู้เล่นในท้องถิ่น footstepcontroller มีหน้าที่ในการเพิ่มเหตุการณ์การเคลื่อนไหวไปยัง animator สร้างโปรเจกต์ > สร้าง > zepeto > typescript และเปลี่ยนชื่อเป็น footstepcontroller เขียนสคริปต์ตามด้านล่าง footstepcontroller ts นำเข้า { animationevent, animator, audioclip, audiosource } จาก 'unityengine'; import { zepetoscriptbehaviour } จาก 'zepeto script'; ส่งออกคลาส footstepcontroller เป็น zepetoscriptbehaviour { // เสียงที่ใช้สำหรับเอฟเฟกต์เสียงฝีเท้า public footstepsound audioclip; // แหล่งเสียงสำหรับเล่นเสียงฝีเท้า private zepetoaudio audiosource; // เพิ่มเหตุการณ์อนิเมชันเพื่อกระตุ้นเสียงฝีเท้า public addanimationevent() { // รับส่วนประกอบ animator ที่แนบมากับ gameobject นี้ const anim = this getcomponent\<animator>(); // ตรวจสอบว่ามีส่วนประกอบ animator หรือไม่ if (anim != null) { // สร้าง audiosource สำหรับเสียงฝีเท้า this setaudio(); // ระบุเวลาที่ในคลิปอนิเมชันเมื่อเสียงฝีเท้าควรเล่น const runsoundeventtimes = \[0 1, 0 6]; // เพิ่มเหตุการณ์อนิเมชันไปยังคลิปอนิเมชันที่ระบุ this addanimationclipevent(anim, "move walk", runsoundeventtimes); } } // ตั้งค่า audiosource สำหรับเล่นเสียงฝีเท้า private setaudio() { // สร้างและกำหนดค่าชิ้นส่วน audiosource this zepetoaudio = this gameobject addcomponent\<audiosource>(); this zepetoaudio clip = this footstepsound; } // เปิดใช้งานเสียงฝีเท้า public activatefootsteps() { // แสดงข้อความในบันทึกที่บ่งบอกว่าเสียงฝีเท้ากำลังเล่น console log("footsteps!"); // เล่นเสียงฝีเท้าด้วย audiosource ที่กำหนดค่าแล้ว this zepetoaudio play(); } // เพิ่มเหตุการณ์อนิเมชันไปยังคลิปอนิเมชันที่ระบุ private addanimationclipevent(anim animator, clipname string, eventtimes number\[]) { // เริ่มต้นดัชนีของคลิปอนิเมชัน let animationclipindex number; // รับคลิปอนิเมชันทั้งหมดจาก runtimeanimatorcontroller const clips = anim runtimeanimatorcontroller animationclips; // ค้นหาดัชนีของคลิปอนิเมชันที่ระบุ for (let i = 0; i < clips length; i++) { if (clips\[i] name == clipname) { animationclipindex = i; } } // ทำซ้ำผ่านเวลาที่ระบุ eventtimes foreach(eventtime => { // สร้าง animationevent ใหม่สำหรับการกระตุ้นเสียงฝีเท้า const newevent animationevent = new animationevent(); newevent time = eventtime; newevent functionname = "invoke"; newevent stringparameter = "activatefootsteps"; // เพิ่ม animationevent ใหม่ไปยังคลิปอนิเมชัน clips\[animationclipindex] addevent(newevent); }); } } คำอธิบายสคริปต์ footstepcontroller เพิ่มเหตุการณ์อนิเมชันและเล่นเสียงเอฟเฟกต์เสียงฝีเท้าเมื่อเกิดเหตุการณ์นั้นขึ้น setaudio() เพิ่มคอมโพเนนต์ audiosource เพื่อใช้เสียงฝีเท้ากับวัตถุ addanimationclipevent() เพิ่มเหตุการณ์อนิเมชันไปยังคลิปอนิเมชันที่ระบุ คุณต้องใส่ส่วนประกอบต่อไปนี้เป็นค่าพารามิเตอร์ อนิเมเตอร์สำหรับผู้เล่นท้องถิ่น ชื่อคลิปอนิเมชันที่เหตุการณ์ถูกนำไปใช้ อาร์เรย์ของเวลาอนิเมชันที่นำเหตุการณ์ไปใช้ ใน newevent ที่ลงทะเบียนด้วย addanimationclipevent() จะมีการตั้งค่ารายการต่อไปนี้ (1) newevent time เวลาแอนิเมชันเมื่อเหตุการณ์เกิดขึ้น ค่า 0 คือจุดเริ่มต้นของความยาวทั้งหมด และค่า 1 คือจุดสิ้นสุดของความยาวทั้งหมด (2) newevent functionname ชื่อของฟังก์ชันที่เหตุการณ์เกิดขึ้น ใน typescript ควรมีการกำหนดประเภทเป็น "invoke" (3) newevent stringparameter ค่าพารามิเตอร์ที่ตั้งไว้ให้กับฟังก์ชันเมื่อเหตุการณ์เรียกใช้ฟังก์ชันนั้น typescript จะระบุชื่อฟังก์ชันที่จะถูกเรียกใช้ เมื่อเกิดเหตุการณ์ activatefootsteps() จะถูกเรียกใช้และเสียงฝีเท้าจะถูกเล่น 2\) ตอนนี้สร้าง footstepmanager ที่เพิ่มคอมโพเนนต์ footstepcontroller ไปยังวัตถุ animator ของผู้เล่นท้องถิ่นเมื่อผู้เล่นท้องถิ่นถูกสร้างขึ้นในระหว่างการทำงาน โปรเจกต์ > สร้าง > zepeto > typescript และเปลี่ยนชื่อเป็น footstepmanager เขียนสคริปต์ตามด้านล่าง footstepmanager ts import { spawninfo, zepetoplayers } from 'zepeto character controller' import { zepetoscriptbehaviour } from 'zepeto script' import footstepcontroller from ' /footstepcontroller' import { worldservice } from 'zepeto world' import { audioclip } from 'unityengine'; export default class footstepmanager extends zepetoscriptbehaviour { // เสียงที่จะเล่นสำหรับเสียงฝีเท้า public footstepsound audioclip; start() { // ตัวฟังเหตุการณ์เมื่อผู้เล่นท้องถิ่นถูกเพิ่ม zepetoplayers instance onaddedlocalplayer addlistener(() => { // เข้าถึงตัวละคร zepeto ของผู้เล่นท้องถิ่น const zepetocharacter = zepetoplayers instance localplayer zepetoplayer character; // แนบสคริปต์ footstepcontroller ไปยัง gameobject ของ zepetoanimator const footstepcontroller = zepetocharacter zepetoanimator gameobject addcomponent\<footstepcontroller>(); // ตั้งค่า footstepsound สำหรับ footstepcontroller footstepcontroller footstepsound = this footstepsound; // เพิ่มเหตุการณ์อนิเมชันเพื่อกระตุ้นเสียงฝีเท้า footstepcontroller addanimationevent(); }); } } คำอธิบายสคริปต์ หลังจากที่ footstepmanager ตรวจพบว่าผู้เล่นท้องถิ่นกำลังถูกเพิ่ม มันจะแนบสคริปต์ footstepcontroller ไปยัง gameobject ของ zepetoanimator ของผู้เล่นนั้น footstepcontroller มีหน้าที่เพิ่มเหตุการณ์อนิเมชันที่เล่นเสียงฝีเท้า สคริปต์ของฟังก์ชันที่ดำเนินการโดยเหตุการณ์อนิเมชันของ animator ต้องถูกนำไปใช้กับวัตถุที่มีส่วนประกอบ animator ที่เกี่ยวข้องอย่างเหมือนกัน ดังนั้นคุณต้องค้นหา zepetoanimator gameobject และนำสคริปต์ footstepcontroller ไปใช้เป็น addcomponent 3\) ใช้เสียงฝีเท้าไปที่ footstepsound ของ footstepmanager 4\) หากคุณกดปุ่มเล่นเพื่อรันมัน คุณจะเห็นว่าเสียงจะเล่นตามขั้นตอนของผู้เล่นท้องถิ่นเมื่อพวกเขาเดิน 👍 เคล็ดลับ zepeto basic animator's walk state ประกอบด้วยการผสมผสานและสถานะการเคลื่อนไหวหลายอย่าง เนื่องจากตัวอย่างใช้เสียงเฉพาะกับสถานะ move walk คุณสามารถปรับแต่ง addanimationclipevent() และป้อนมันโดยตรงไปยังสถานะต่างๆ เช่น การเดินเร็วและการวิ่ง เมื่อเสียงถูกนำไปใช้กับหลายสถานะการเคลื่อนไหว เสียงฝีเท้าอาจทับซ้อนกันเนื่องจากการผสมผสานการเคลื่อนไหว เพื่อแก้ไขปัญหานี้ ให้เขียนคำสั่งเงื่อนไขเพิ่มเติมเพื่อให้เสียงที่เกี่ยวข้องถูกเล่นเมื่อ animationevent animatorclipinfo weight เท่ากับ 0 5 ❗️ ปัญหาที่ทราบ เมื่อดำเนินการตามสไตล์คู่มือการพัฒนา ข้อความแสดงข้อผิดพลาดต่อไปนี้อาจปรากฏขึ้น แต่จะไม่มีปัญหาในการดำเนินการ