มาทำนาฬิกาจับเวลาถอยหลังกันดีกว่า
16/02/2017
สวัสดีครับ กลับมาพบกับเทคนิคดีๆในการเขียนเกมด้วย Unity กันอีกเช่นเคยนะครับ วันนี้ไม่มี Asset มาฝาก แต่มี Code snippet ง่ายๆใช้ได้จริงมาฝากแทนครับ โดยวันนี้ผมจะมาแนะนำวิธีการทำนาฬิกาจับเวลาแบบง่ายๆครับ
ในเกมของเพื่อนๆ หลายๆครั้งก็น่าจะมีการใช้การจับเวลาใช่ไม๊ล่ะครับ ไม่ว่าจะเป็นการจับเวลาเล่นเกม การจับเวลาสู้กับบอส แต่หลายๆครั้ง Process พวกนี้เราก็ทำหลังบ้าน ไม่ได้เอาออกมาให้ผู้เล่นเห็น แต่วันนี้ผมจะแนะนำวิธีการทำนาฬิกาจับเวลาแบบดิจิตอล เพื่อให้ค่อยๆนับเวลาถอยหลังได้ครับ
เริ่มด้วยการสร้าง Text Ui ขึ้นมาก่อนครับ และใส่ค่าเริ่มต้นไว้ว่า 00:00:00 ครับ

จากภาพจะสังเกตว่าผมสร้างสคริปชื่อว่า stopwatch ไว้แล้ว มาค่อยๆเขียนตามไปครับ

เริ่มมาเราจะต้องใส่ using ui เข้ามาก่อน เพื่อให้สคริปของเราสามารถใช้คลาส Ui ได้ครับโดยใส่ using UnityEngine.UI;
จากนั้นเราจะประกาศตัวแปรตามนี้ครับ

public float timeleft = 300.00f; // ค่าเริ่มต้นที่เราต้องการนับถอยหลังครับ ตัวอย่างนี้คือ 5 นาที
float oldtime; // ตัวแปรเพื่อเก็บค่าเริ่มต้นไว้ เวลา Reset จะมาเรียกค่านี้ไปใช้
float miniute; // ตัวแปรเก็บนาที
float second; // ตัวแปรเก็บวินาที
string[] millisec; // ตัวแปรเก็บมิลลิเซก ( เดี๋ยวจะอธิบายว่าทำไมเป็น String ครับ )
public Text time_text; // ตัวแปรอ้างอิงช่อง Text ui ของเรา
bool isstart = false; // ตัวแปรสำหรับปุ่มเริ่มและหยุดการจับเวลาครับ
มาดูในฟังชั่นก์ Start กันครับ

ในฟังชั่นก์นี้เรามีคำสั่งเดียวก็คือ เอาค่าเริ่มต้น ไปเก็บไว้ในค่าสำหรับ Reset นั่นเองครับ มาดูฟังชั่นก์ Update กันครับ

ถัดมาเราจะสร้างปุ่มขึ้นมาสองปุ่มครับ ปุ่มนึงเอาไว้เริ่มและหยุดการจับเวลา ส่วนอีกปุ่มเอาไว้ Reset ครับ

โดยเราจะสร้างฟังชั่นก์เพิ่ม 2 ฟังัช่นก์เพื่อให้เวลากดปุ่มมาเรียกใช้ฟังชั่นก์นี้ครับ

ฟังชั่นก์ starttimer เอาไว้เวลาเรากดปุ่ม Start Stop ครับ ถ้ากำลังนับอยู่ก็จะหยุด ถ้าหยุดอยู่ก็จะนับต่อครับ ฟังชั่นก์ Reset ครับ เมื่อกดปุ่ม Reset มาเรียกฟังชั่นก์นี้ แล้วจะทำการรีเซตเวลาครับ ที่เหลือก็แค่เอาสคริปนี้ไปแปะไว้ที่เกมออบเจคซักตัว เรียกฟังชั่นก์จากปุ่ม ลาก Text ไปใส่ในช่องสคริปของเรา ก็เสร็จแล้วครับ
เป็นไงบ้างครับกับเทคนิคที่นำมาฝากกันในวันนี้ หวังว่าเพื่อนๆจะได้นำไปใส่ในเกมของเพื่อนๆนะครับ แล้วพบกันใหม่โอกาสหน้าครับ
ปล. เพิ่งสังเกตว่าผมตั้งชื่อตัวแปล minute ผิดหมดเลย แคปเจอร์ภาพมาหมดแล้วถึงสังเกตเห็น ขออภัยมา ณ ที่นี้ด้วยครับ

กลับหน้ารวม