เจาะลึกความหมายและที่มาของค่า Time.deltaTime และวิธีการใช้งานเบื้องต้น
เพื่อใช้แก้ไขปัญหาเฟรมเรต (fps) ไม่คงที่ในแต่ละเครื่อง
delta = ค่าความแตกต่าง time = เวลา
Time.deltaTime คือ
เวลาที่ใช้ในการเรนเดอร์ในแต่ละเฟรม โดยการเปรียบเทียบเวลาจากการเรียกฟังชั่น Update ของเฟรมก่อนหน้ากับเฟรมปัจจุบัน
Time.deltaTime ถูกสร้างขึ้นมาเพื่อใช้ในการแก้ปัญหา fps (Frame rate Per Second) ไม่คงที่ เพราะ fps มีผลต่อความถี่ในการอ่านคำสั่งที่อยู่ในฟังชั่น Update() ยิ่งคอมแรง เกมไม่หนักเครื่องแค่ไหนก็จะยิ่งมี fps สูง
ถ้าเราสั่งให้วัตถุขยับไปข้างหน้า 0.05 หน่วย ใน Update()จากปัญหาข้างต้น Time.deltaTime จึงถูกคิดค้นขึ้นมาตามหลักทฤษฎีฟิสิกส์สัมพันธภาพของไอน์สไตน์(#โม้ๆๆ...)
- ในเครื่องที่เล่นด้วย 20 fps วัตถุจะขยับไปแค่ 1 หน่วย
- ในเครื่องที่เล่นด้วย 100 fps วัตถุจะขยับไปถึง 5 หน่วย
ค่าของ Time.deltaTime จะเปลี่ยนไปตาม fps ทำให้ deltaTime ในแต่ละเฟรมนั้นอาจจะไม่เท่ากันเนื่องจาก fps มักจะไม่คงที่ ขึ้นอยู่กับปริมาณของการคำณวนและการวาดกราฟฟิกในแต่ละเฟรม และความเร็วของคอมว่าแรงแค่ไหน
deltaTime = 1/fps หรือคือ deltaTime*fps = 1 สมมุติว่ามี fps = 20 ค่า deltaTime จะเท่ากับ 1/20 = 0.05
----------------------- How to Use? ----------------------------
1.ใช้นับเวลา
ตั้งตัวแปร float สำหรับจับเวลาให้มีค่าเริ่มต้นเป็น 0
สั่ง float += Time.deltaTime ใน Update()
ทีนี้ค่าในตัวแปรจะเป็นเวลาที่เราจับ
2.นำมาใช้กับ Translate() Rotate() AddForce() เพื่อให้การเคลื่อนที่สมำ่เสมอ
- ถ้าเราใช้คำสั่งเหล่านี้ตามปกติโดยไม่ใช้ Time.deltaTime จะเกิดปัญหาที่ว่าการเคลื่อนที่จะไม่คงที่
- ทำไมล่ะ? เพราะว่า fps ของเเต่ละเวลามันไม่เท่ากัน
- วิธีแก้ปัญหาที่นิยมใช้กันคือ เอา Time.deltaTime มาคูณ จะเป็น Translate(Vector3.forward*1*Time.deltaTime); //1 เมตรต่อวินาที
- ถ้า 2 ช่วงที่ fps ไม่เท่ากัน
- ตอนแรก 30 fps ค่า deltaTime = 1/20= 0.05 ผ่านไปหนึ่งวินาทีขยับ 0.05*20 = 1 เมตร
- ต่อจากนั้น 15 fps ค่า deltaTime = 1/10= 0.10 ผ่านไปหนึ่งวินาทีขยับ 0.10*10 = 1 เมตร เท่าเดิมเย้ \@/
------------------------------E--N--D-------------------------
http://docs.unity3d.com/Documentation/ScriptReference/Time-deltaTime.html
http://docs.unity3d.com/Documentation/ScriptReference/Time-deltaTime.html