ความลับของ Destroy

Destroy-logo

สวัสดีครับ กลับมาพบกับ Tip ดีๆในการใช้ Unity กันเช่นเคย วันนี้ผมมีความลับที่หลายๆคนอาจจะยังไม่รู้ของฟังชั่นก์ Destroy มาฝากกันครับ

เพื่อนๆที่เขียนเกมด้วย Unity น่าจะคุ้นเคยกับฟังชั่นก์ Destroy กันพอสมควรนะครับ เพราะว่าฟังชั่นก์นี้ใช้สำหรับทำลาย GameObject หรือ Component ใน GameObject เพื่อที่จะได้ไม่ทำงานใน Component นั้นอีกต่อไป หรือทำลาย GameObject นั้นๆเพื่อคืน Memory ให้กับเกมของเรา โดยลักษณะการใช้ Destroy ทั่วไปก็คือ

Destroy(gameObject)

( จากตัวอย่างสคริปนี้คือการทำลาย GameObject ที่สคริปนี้แปะอยู่นั่นเองครับ )

ซึ่งเราจะใช้ Destroy กันมากๆในการทำลายวัตถุที่ถูก Instantiate มาครับ เพราะว่าเวลาเราสร้าง GameObject ตอน Runtime เราจะเกิดปัญหาเกมกระตุกหรือ Memory ไม่พอได้ง่ายมากๆ แต่เพื่อนๆบางคนอาจจะมีปัญหาว่า เราอาจจะต้องการให้ GameObject นั้นมีชีวิตอยู่ซักพักก่อนจะทำลายทิ้ง แต่ว่าไม่รู้ว่าจะสั่งยังไงให้มันทำลายทิ้งตอนที่เราไม่ต้องการแล้ว

จริงๆแล้ว ฟังชั่นก์ Destroy มีพารามิเตอร์ซ่อนอยู่อีกตัวนะครับ ซึ่งหากเราไปดูใน Documentation ของ Unity แล้ว เราจะพบว่า โครงสร้างของฟังชั่นก์ Destroy เป็นแบบนี้ครับ

public static void Destroy(Object obj, float t = 0.0F);

นั่นหมายความว่า เราสามารถใส่พารามิเตอร์ t ที่เป็นตัวบอกเวลาได้ ว่าจะทำลาย Object นี้หลังจากเวลาผ่านไปเท่าไหร่ นับตั้งแต่ Object นี้เกิดขึ้นมาครับ ซึ่งวิธีใช้ก็ง่ายๆ

Destroy(gameObject,3.5f);

จากโค้ดตัวอย่าง ผมจะทำลาย GameObject ตัวนี้ หลังจากผ่านไป 3.5 วินาทีครับ

ซึ่งการเขียน Destroy โดยมีพารามิเตอร์เวลากำกับแบบนี้ จะทำให้เรามั่นใจได้ว่า GameObject ของเราจะถูกทำลายและคืน Memory ให้กับเกมของเราอย่างแน่นอน ซึ่งโอกาสที่จะใช้การเขียนแบบนี้บ่อยที่สุดก็น่าจะเป็นการทำลาย Object ที่ถูก Instantiate มานั่นเองครับ

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