วิธี Cooldown บน Unity แบบเรียบง่าย
หลาย ๆ ท่านที่เริ่มทำเกมมักจะมีคำถามว่าจะเริ่มทำเกมได้ จะต้องรู้อะไรบ้าง ?
คำถามนี้มีคำตอบเป็น Infinite Solutions อยู่ที่ว่าท่านสนใจมุมไหนของการทำเกม
สำหรับตัวผมลองขอตอบแบบ Game Developer ที่มาจากสาย Software Engineer นะครับว่า สิ่งที่ท่านต้องรู้แบบเป็น 3 หัวข้อใหญ่
- Computer Programming in any languages
- Physics and Mathematics for Physics ^^
- Time!
รู้เท่านี้ก็เริ่มทำเกม Classic ต่าง ๆ ในอดีตได้แล้วครับ สำหรับผมเนื่องจากมาทางสาย Computer Science ดังนั้นแล้วจึงเน้นเขียนเกมแบบเขียนโค้ด แบบ Hardcore แบบเน้น Physics เน้น Vector จ๋า ๆๆ ไปเลย (มันมีความสุขมากนะที่สุดท้ายเราได้ใช้ในสิ่งที่เราเรียนมาจริง ๆ กับงานจริง ๆ ของเราและมันก็สนุกมาก ๆ ด้วย)
—
แต่วันนี้ผมจะมาคุยเรื่อง Time กัน เป็นหัวข้อใหญ่ที่เรามักจะมองข้าม แต่สุดท้ายก็ข้ามมันไม่ได้อยู่ดีครับ เพราะทุกอย่างในโลกจำลองที่เราสร้างขึ้นมา มีเวลาเป็นปัจจัยสำคัญสำหรับการสร้างความสนุก ความตื่นเต้น ลุ้นละทึก
ดังนั้นแล้ว บทความนี้ของผมก็จะมากล่าวถึงเรื่องการทำ CoolDown กันซึ่งแอบบอกไว้ก่อนเลยนะครับว่า มันดูเป็นเรื่องง่ายที่ต้องทำบ่อย ๆ แต่ Unity ก็ไม่ได้มี
Best Practices แบบง่าย ๆ และสะดวกมาให้เราครับ
เริ่มแรกทุกคนคงเคยได้ยิน WaitForSecond กันมาบ้างแล้วใช่ไหมครับ ซึ่งจะต้องใช้งานร่วมกับ Corountine เป็นการทำงานแบบ Multi-Thread ดัง Code ต่อไปนี้ครับ
แต่มันใช้ไม่ค่อย Work เท่าไหร่ กับกรณีที่เราต้องการให้มีการยิงออกไปครั้งเดียว กับการเช็ค GetKey หรือ GetButton บางท่านก็อาจจะสงสัยว่าแล้วทำไม ไม่ใช้ GetKeyDown หรือ GetButtonDown ล่ะ
มันก็ใช่ครับแต่สำหรับเกมแนว Shooting อย่าง AdaSpace ที่เป็นเกมยานอวกาศ แบบ Space Invader ที่ผมทำขึ้นมาเพื่อความสนุกมันต้องการที่จะยิงค้างได้ด้วย เวลาที่เรา Hold Key Down แต่ก็ไม่อยากให้มันยิงออกมา เยอะแยะเต็มไปหมด
ดังนั้นแล้ว เราจึงมีวิธีสำหรับปัญหานี้กันครับ โดยการใช้ Time.time เข้ามาช่วยครับ
Time.time เป็นการ get เวลา ณ Frame ปัจจุบัน โดยเริ่มนับตั้งแต่เริ่ม Application ครับ
เราสามารถนำมา Check ได้ง่าย ๆ จาก LastTime ที่มีการยิงออกไปแล้วบวกด้วย Cooldown time ของเรา หากเวลา Time.time ซึ่งเป็นเวลาปัจจุบันมีค่ามากกว่า LastTimeFire + Cooldown แล้วนั้นแปลว่า ครบกำหนด Cooldown แล้วเราสามารถทำการยิงรอบต่อไปได้ครับ
เป็นยังไงกันบ้างครับ เพียงเท่านี้เราก็สามารถที่จะยิงโดยมี Cooldown ได้แล้วครับ หากผู้เล่นเก็บ Power Up Item ได้ เราก็ไปปรับให้ cooldown time น้อยลง ผู้เล่นของเราก็จะสามารถยิงรัว ๆๆๆๆ ได้เลยคร้าบบบบบ
—
สนใจอยากเขียนเกมบน Unity ก็ติดต่อกันมาได้เลยนะครับบบบบ