ช่วยด้วย
คำถามที่พบบ่อยเกี่ยวกับการพัฒน...
คุณใช้ Singleton อย่างไร?
6นาที
ซิงเกิลตัน (singleton) เป็นรูปแบบการออกแบบที่รับประกันว่ามีเพียงหนึ่งอินสแตนซ์ของคลาสเฉพาะในโปรแกรมเท่านั้น รูปแบบซิงเกิลตันให้มีอินสแตนซ์เดียวทั่วโลกของคลาส ทำให้สามารถเข้าถึงได้ง่ายจากสคริปต์อื่น ๆ ที่ต้องการ เช่น การจัดการตรรกะ เสียง ui และทรัพยากรที่รวมศูนย์ภายในโลก ใน zepetoscript คุณสามารถนำซิงเกิลตันไปใช้ในลักษณะดังนี้ private static instance classname = null; public static get instance() classname { 	if (this instance == null) { 	 this instance = gameobject findobjectoftype\<classname>(); 	} 	return this instance; } 👍 เคล็ดลับ หากมี gameobject ที่มีสคริปต์ซิงเกิลตันแนบอยู่ในฉากแล้ว คุณสามารถใช้รูปแบบนี้ได้ หากไม่มี ให้เพิ่มโค้ดเพื่อสร้าง gameobject ตัวอย่าง new gameobject("objectname") addcomponent\<classname>(); มานำซิงเกิลตันไปใช้ในการจัดการ ui ในตัวอย่างกันเถอะ 1\) เพิ่ม ui > ข้อความ และปุ่มลงในฉาก ตั้งค่าตรรกะเพื่อเพิ่มคะแนนเมื่อกดปุ่ม "เพิ่มคะแนน" ตั้งค่าตรรกะเพื่อลดคะแนนเมื่อกดปุ่ม "ลดคะแนน" 2\) สร้างสคริปต์ชื่อ "scoremanager" ซึ่งจะใช้ singleton สคริปต์ scoremanager จะรับผิดชอบในการเพิ่ม/ลดคะแนนและอัปเดตข้อความเมื่อถูกเรียกจากสคริปต์อื่น ๆ import { zepetoscriptbehaviour } from 'zepeto script'; import { gameobject } from 'unityengine'; import { text } from 'unityengine ui'; export default class scoremanager extends zepetoscriptbehaviour { // การประกาศ singleton private static instance scoremanager = null; public static get instance() scoremanager { if (this instance == null) { this instance = gameobject findobjectoftype\<scoremanager>(); } return this instance; } // การประกาศตัวแปร public scoretext text; private currentscore number; start() { // ตั้งค่าคะแนนเริ่มต้นเป็น 0 สำหรับการทดสอบ this currentscore = 0; } // สคริปต์อื่นสามารถเรียกใช้ increasescore public increasescore(amount number) { this currentscore += amount; this scoretext text = `คะแนน ${this currentscore}`; } // สคริปต์อื่นสามารถเรียกใช้ decreasescore public decreasescore(amount number) { this currentscore = amount; this scoretext text = `คะแนน ${this currentscore}`; } } คำอธิบายสคริปต์ private static instance นี่คือตัวแปรสถิติเสมือนภายในคลาส ซึ่งตั้งค่าเริ่มต้นเป็น null public static get instance คุณสมบัติสถิตินี้ให้วิธีการสำหรับโค้ดภายนอกในการเข้าถึงอินสแตนซ์ที่ไม่ซ้ำกันของคลาสนี้ ตรวจสอบ if (this \\ instance == null) หากมันเป็น null ให้ใช้ gameobject findobjectoftype<>() เพื่อค้นหาและคืนค่าคอมโพเนนต์ประเภท classname และกำหนดให้กับตัวแปรสถิติ 3\) หลังจากเขียนสคริปต์แล้ว ให้กลับไปที่ inspector และเชื่อมต่อกับคอมโพเนนต์ text 4\) ถัดไป สร้างสคริปต์ชื่อ "scorelogicsample" เพื่อแสดงวิธีการเรียกใช้ singleton ให้แน่ใจว่า scoremanager และ scorelogicsample อยู่ในไดเรกทอรีเดียวกัน เขียนโค้ดแบบนี้ import { zepetoscriptbehaviour } from 'zepeto script'; import { gameobject } from 'unityengine'; import { text, button } from 'unityengine ui'; // นำเข้าสคริปต์ singleton import scoremanager from ' /scoremanager'; export default class scorelogicsample extends zepetoscriptbehaviour { public increasescorebutton button; public decreasescorebutton button; // ประกาศตัวแปรประเภท scoremanager private scoremanager scoremanager; start() { // กำหนด scoremanager ให้กับตัวแปร this scoremanager = gameobject findobjectoftype\<scoremanager>(); this increasescorebutton onclick addlistener(()=> { // เรียกใช้ฟังก์ชันที่ประกาศใน singleton this scoremanager increasescore(10); }); this decreasescorebutton onclick addlistener(()=> { // เรียกใช้ฟังก์ชันที่ประกาศใน singleton this scoremanager decreasescore(10); }); } } การระบุเส้นทางให้ถูกต้องเมื่อดึงสคริปต์ singleton เป็นสิ่งสำคัญ คุณสามารถปรับส่วนที่เรียก scoremanager ในสคริปต์ของคุณตามที่ต้องการ 5\) กดปุ่ม \[▶︎(เล่น)] เพื่อทดสอบ คุณควรสังเกตฟังก์ชันใน scoremanager ที่ถูกเรียกเมื่อคุณคลิกปุ่มใน scorelogicsample ทำให้มันทำงานตามที่คาดหวัง