ช่วยด้วย
คำถามที่พบบ่อยเกี่ยวกับการพัฒน...

คุณใช้ Singleton อย่างไร?

6min

ซิงเกิลตัน (Singleton) เป็นรูปแบบการออกแบบที่รับประกันว่ามีเพียงหนึ่งอินสแตนซ์ของคลาสเฉพาะในโปรแกรมเท่านั้น

รูปแบบซิงเกิลตันให้มีอินสแตนซ์เดียวทั่วโลกของคลาส ทำให้สามารถเข้าถึงได้ง่ายจากสคริปต์อื่น ๆ ที่ต้องการ เช่น การจัดการตรรกะ เสียง UI และทรัพยากรที่รวมศูนย์ภายในโลก

ใน ZEPETOScript คุณสามารถนำซิงเกิลตันไปใช้ในลักษณะดังนี้:

TypeScript


👍 เคล็ดลับ

  • หากมี GameObject ที่มีสคริปต์ซิงเกิลตันแนบอยู่ในฉากแล้ว คุณสามารถใช้รูปแบบนี้ได้
  • หากไม่มี ให้เพิ่มโค้ดเพื่อสร้าง GameObject
    • ตัวอย่าง: new GameObject("ObjectName").AddComponent<ClassName>();

มานำซิงเกิลตันไปใช้ในการจัดการ UI ในตัวอย่างกันเถอะ:

1) เพิ่ม UI > ข้อความ และปุ่มลงในฉาก

  • ตั้งค่าตรรกะเพื่อเพิ่มคะแนนเมื่อกดปุ่ม "เพิ่มคะแนน"
  • ตั้งค่าตรรกะเพื่อลดคะแนนเมื่อกดปุ่ม "ลดคะแนน"
Document image




2) สร้างสคริปต์ชื่อ "ScoreManager" ซึ่งจะใช้ Singleton.

  • สคริปต์ ScoreManager จะรับผิดชอบในการเพิ่ม/ลดคะแนนและอัปเดตข้อความเมื่อถูกเรียกจากสคริปต์อื่น ๆ.
TypeScript




  • คำอธิบายสคริปต์
    • private static _instance: นี่คือตัวแปรสถิติเสมือนภายในคลาส ซึ่งตั้งค่าเริ่มต้นเป็น null.
    • public static get Instance: คุณสมบัติสถิตินี้ให้วิธีการสำหรับโค้ดภายนอกในการเข้าถึงอินสแตนซ์ที่ไม่ซ้ำกันของคลาสนี้.
    • ตรวจสอบ if (this.\_instance == null). หากมันเป็น null ให้ใช้ GameObject.FindObjectOfType<>() เพื่อค้นหาและคืนค่าคอมโพเนนต์ประเภท ClassName และกำหนดให้กับตัวแปรสถิติ.



3) หลังจากเขียนสคริปต์แล้ว ให้กลับไปที่ Inspector และเชื่อมต่อกับคอมโพเนนต์ Text.

Document image




4) ถัดไป สร้างสคริปต์ชื่อ "ScoreLogicSample" เพื่อแสดงวิธีการเรียกใช้ Singleton ให้แน่ใจว่า ScoreManager และ ScoreLogicSample อยู่ในไดเรกทอรีเดียวกัน.

Document image

  • เขียนโค้ดแบบนี้:
TypeScript




  • การระบุเส้นทางให้ถูกต้องเมื่อดึงสคริปต์ Singleton เป็นสิ่งสำคัญ
  • คุณสามารถปรับส่วนที่เรียก ScoreManager ในสคริปต์ของคุณตามที่ต้องการ



5) กดปุ่ม [▶︎(เล่น)] เพื่อทดสอบ

  • คุณควรสังเกตฟังก์ชันใน ScoreManager ที่ถูกเรียกเมื่อคุณคลิกปุ่มใน ScoreLogicSample ทำให้มันทำงานตามที่คาดหวัง
Document image