Time scale by script

stranglehold

สวัสดีครับ กลับมาพบกับทิปการทำเกมด้วย Unity เช่นเคย วันนี้เราจะมาพูดถึงเรื่องของเวลาหรือ หรือ Time scale กันต่อจากบทความที่แล้วครับ

จากคราวที่แล้วผมได้แนะนำวิธีการเปลี่ยนค่า Time scale ของเกมไปแล้ว แต่ว่าการตั้งค่าแบบนั้นไม่ยืดหยุ่นเท่าที่ควร เพราะว่าเกมของเราหลายๆเกมคงไม่ต้องการใช้ค่า Time scale นั้นไปตลอด วันนี้เราจะเปลี่ยนค่า Time scale โดยใช้ Script กันครับ

01

จากภาพตัวอย่างผมมี Scene มาตรฐานของเราอยู่นะครับ โดยมี Script SlowmoScript ใส่ไว้ใน Main camera ครับ รวมไปถึงมี Ridgidbody component อยู่ในกล่องที่ลอยอยู่ด้วยครับ เดี๋ยวเราจะมาดู Code ที่อยู่ใน Script นี้กันครับ

ใน SlowmoScript ผมใส่ Code ไว้ใน Update ที่เดียวนะครับ

02

มาดูส่วนต่างๆกันครับ

if (Input.GetKeyDown(KeyCode.Space)) – สคริปทั้งหมดนี้ จะทำงานต่อเมื่อเรากด Space bar เท่านั้นครับ

if (Time.timeScale ==  1)    –  ถ้าตอนกด Space bar ค่า Time scale เท่ากับ 1 หรือเวลาเดินปกติ

Time.timeScale = 0.05f; – ให้เปลี่ยนค่า Time scale เป็น 0.05 ซึ่งช้ามากๆครับ

Time.timeScale = 1; – ถ้าไม่ ให้เปลี่ยนเป็น 1 คือค่าปกติ

 

ซึ่งเมื่อเรากด Play แล้วกด Space bar จะเห็นว่ากล่องตกลงมาช้าลง ซึ่งก็เป็นผลจากการที่เราเปลี่ยนค่า Time Scale นั่นเอง และหากเราต้องหารให้เวลากลับมาปกติ ก็เพียงแค่กด Space bar อีกครั้งนึงครับ

03

 

เป็นยังไงบ้างครับสำหรับทิปการเปลี่ยน Time scale ซึ่งเพื่อนๆสามารถนำไปประยุกต์ใช้กับการทำ Bullet time การ Pause เกม หรือการเร่งเวลาให้เร็วขึ้นก็ได้เช่นกันครับ แล้วพบกันใหม่ในทิปการเขียนเกมในครั้งต่อไปครับ