facebook_pixel

ทำ Object Pooling ง่ายๆ ด้วย Ez Pooling

//ทำ Object Pooling ง่ายๆ ด้วย Ez Pooling

สวัสดีครับ กลับมาพบกับเทคนิคดีๆในการเขียนเกมด้วย Unity กันอีกครั้งนะครับ โดยวันนี้ผมก็มี Asset เจ๋งๆมาฝากเพื่อนๆกันเช่นเคยครับ แต่ Asset วันนี้นอกจากจะฟรีแล้ว ยังเหมาะสมกับเพื่อนๆทุกคนเลยก็ว่าได้นะครับ เพราะ Asset ที่ผมนำมาฝากในวันนี้มีชื่อว่า EZ Pooling ครับ

เพื่อนๆทั้งมือเก่าและมือใหม่อาจจะเคยได้ยินคำว่า Object pooling กันมาบ้างใช้ไม๊ล่ะครับ หลักการของมันอธิบายง่ายๆก็คือการสร้างออบเจคเตรียมไว้ใช้ตั้งแต่ต้นเลย และจะนำมาใช้ตอนที่ต้องการโดยไม่ทำลายทิ้งนั่นเองครับ ซึ่งกับเกมที่มีการสร้างออบเจคใหม่ระหว่าง Run time เยอะๆนั้นไม่ดีต่อ Performance ของเกมเราครับ การมี Object pooling ก็จะทำให้เรานำออบเจคกลับมาใช้ใหม่ได้นั่นเองครับ ซึ่งจริงๆแล้วการเขียนระบบ Object pooling เองก็ไมได้ยากเกินไปนักครับ แต่ Asset ที่ผมนำมาฝากในวันนี้จะทำให้เราไม่ต้องเสียเวลาสร้างระบบนี้ขึ้นมาเอง โดย Asset ตัวนี้จะสร้างระบบ Object pooling ให้เรานั่นเองครับ มาดู Scene ตัวอย่างกันเลยครับ โดย Scene ที่ผมจะยกมาเป็นตัวอย่างจะเป็น Scene ที่ชื่อว่า recycle prefab ครับ

จากภาพ Component ที่เราสนใจก็คือ Ez pool manager ครับ โดยที่นี่จะเป็นการสร้าง Pool ของเรา สิ่งที่เราต้องตั้งค่าก็คือ

  • Prefab : ลากเอา Prefab ที่เราต้องการจะทำ Pooling มาใส่ครับ

  • Show debug log : เอาไว้เปิดการ Debug ของตัว Asset ครับ

  • Preload Qty : จำนวนที่เราต้องการให้ Pool นี่สร้างไว้ตั้งแต่แรก

  • Allow pool to grow : เราจะให้ Pool นี่ขยายจำนวนสมาชิกได้มากกวี่ท่เราตั้งค่าไว้หรือไม่

  • Allow pool to recycle : ให้นำออบเจคที่สร้างไว้ใช้ใหม่หรือไม่

ซึ่งวิธีการเรียกใช้ออบเจคที่ทำ Pool ไว้แล้วก็ไม่ยากครับ เพียงแค่ใช้คำสั่งนี้

EZ_PoolManager.Spawn(prefab, Random.insideUnitSphere, Random.rotation);

แทนการ Instantiate แบบปกตินั่นเองครับ โดยหาก Pool ของเรายังใช้ไม่หมดก็จะเอาใน Pool ตัวถัดไปมาใช้ แต่ถ้าหมดแล้วก็จะนำตัวที่อยู่ตัวแรกมาใช้ใหม่นั่นเองครับ

ซึ่งหลายๆครั้งการเอา Object มาใช้ใหม่ ก็จำเป็นต้อง Reset ค่าให้กับตัวออบเจคด้วยครับ เช่นปรับความเร็วให้กลายเป็น 0 หรือทำให้เกิดพาติเคิลใหม่อีกรอบเป็นตัน ตัว Asset มี Event มารองรับก็คือ

OnSpawned() : จะเกิดเมื่อสั่งการ Object นั้นผ่านฟังชั่นก์ Spawn

OnDespawned() : จะเกิดเมื่อ Pool เราสั่งลบ Object นั้นครับ

 

เพื่อนๆที่สนใจก็สามารอ่านจาก Manual ที่อยู่ใน Asset ได้ครับ โดยสามารถดาวโหลด Asset ได้ ที่นี่ ครับ

เป็นยังไงบ้างครับกับ Asset ที่นำมาฝากกันในวันนี้ เชื่อว่าเพื่อนๆน่าจะได้นำไปใช้กันอย่างแน่นอนนะครับ เพราะช่วยให้เราประหยัดเวลาได้อย่างมากเลยครับ แล้วพบกันใหม่โอกาสต่อไปครับ

By | 2018-04-07T23:44:33+00:00 April 9th, 2018|การใช้งาน Unity|0 Comments

Leave A Comment