Search…

C# Script - Lớp Time

24/09/20204 min read
Giới thiệu về lớp Time trong Unity, 1 số thuộc tính và chức năng, ứng dụng của lớp Time.

Nắm bắt và xử lý thời gian rất quan trọng đối với mọi chương trình, xử lý thời gian để giới hạn số frame của game (FPS), xử lý lực bắn, ứng dụng để tính toán và di chuyển đối tượng 1 cách mượt mà nhất, … Trong Unity, các thao tác này trở nên đơn giản hơn bao giờ hết bởi Unity đã hỗ trợ sẵn hầu hết các thuộc tính cơ bản có liên quan đến việc xử lý thời gian.

Bài viết sau sẽ giới thiệu về lớp Time trong Unity và 1 số ứng dụng của nó.

Lớp Time

Time là 1 lớp được định nghĩa sẵn bởi Unity, cung cấp các thuộc tính lưu trữ và xử lý các thông tin về thời gian trong Unity. Lớp Time không bao gồm bất kỳ phương thức nào, nhưng có 1 vài thuộc tính có thể chỉnh sửa để tương thích và phù hợp với chương trình.

1 số thuộc tính quan trọng

time

Thời gian tính bằng giây (kiểu float), trả về thời điểm bắt đầu của frame hiện tại. Thuộc tính này không thể chỉnh sửa.

Thuộc tính này sẽ trả về giá trị như nhau cho dù được gọi ở các thời điểm khác nhau trong cùng 1 vòng lặp.

Time.time sẽ trả về giá trị của Time.fixedTime nếu được gọi trong hàm FixedUpdate.

deltaTime

Thuộc tính này trả về khoảng thời gian (tính bằng giây) cần thiết để xử lý hết frame trước đó.

deltaTime được ứng dụng rất nhiều trong các hàm thuộc lớp Mathf, khi cần di chuyển đối tượng mượt mà. Thuộc tính deltaTime không thể chỉnh sửa.

Khi được gọi trong FixedUpdate, thuộc tính sẽ trả về giá trị của fixedDeltaTime thuộc lớp Time.

timeScale

timeScale là thuộc tính mô tả độ co giãn của thời gian.

  • Khi nhận giá trị 1.0, thời gian trôi qua đúng bằng thời gian thực.
  • Khi muốn chương trình chạy chậm đi 2 lần, gán giá trị 0.5 cho timeScale.
  • Khi timeScale nhận giá trị 0, chương trình sẽ đóng băng hoàn toàn.

timeScale sẽ ảnh hưởng lên mọi đối tượng được quản lý bởi lớp Time, ngoại trừ thuộc tính realTimeSinceStartup.

Lưu ý: Hàm FixedUpdate (nếu có) sẽ không được gọi khi timeScale nhận giá trị 0.

maximumDeltaTime

Khoảng thời gian tối đa mà 1 frame có thể được cập nhật. Thuộc tính này thường được sử dụng để tránh việc FPS bị giảm đột ngột do tiến trình thu dọn rác – GarbageCollector và các thao tác xử lý vật lý tốn kém tài nguyên gây ra.

Nếu việc xử lý giá trị tốn nhiều thời gian, các hiệu ứng và vật lý sẽ có ít thời gian hơn để cập nhật. Việc này sẽ làm giảm chất lượng game, tuy nhiên sẽ tránh được hiện tượng giật, lag khi chơi game.

Giá trị hợp lý để thiết lập cho thuộc tính vào khoảng 1/10 – 1/3 giây.

Các thuộc tính khác và chức năng

fixedTime và fixedDeltaTime

2 thuộc tính này có chức năng tương tự như Time.timeTime.deltaTime, nhưng được sử dụng trong hàm FixedUpdate để tính toán các thao tác vật lý được đơn giản hơn.

Các thao tác vật lý thường sử dụng các công thức phức tạp nên việc làm tròn các giá trị là khá quan trọng giúp đỡ hao tốn tài nguyên hơn.

smoothDeltaTime

Giả sử tại 1 hoặc 1 vài vòng lặp liên tiếp trong game, các giá trị cần xử lý tăng đột biến khiến cho deltaTime tăng nhanh đột ngột. Điều này gây ảnh hưởng không nhỏ đến độ chính xác của các thao tác trong các lần lặp tiếp theo. Thuộc tính smoothDeltaTime được sử dụng để làm giảm việc thay đổi đột ngột thời gian như thế.

Ví dụ nhỏ dưới đây sẽ giúp hiểu rõ hơn về chức năng của thuộc tính smoothDeltaTime:

deltaTime smoothDeltaTime
... ...
0.2 0.2
0.2 0.2
0.2 0.2
0.2 0.4833
0.9 0.4833
0.8 0.4833
0.4 0.4833
0.4 0.4833
0.2 0.4833
0.2 0.2
... ...

Ở bảng trên, mức độ thay đổi của smoothDeltaTime là nhỏ hơn tại hầu hết thời điểm so với deltaTime.

frameCount

Tổng số lượng frame đã được xử lý kể từ khi chương trình bắt đầu chạy. Thuộc tính này không thể thay đổi.

realtimeSinceStartup

Trả về thời gian tính bằng giây kể từ khi chương trình được khởi chạy. Ngoại trừ khi thay đổi timeScale, có thể sử dụng Time.time tương đương trong mọi trường hợp còn lại.

Khi chương trình được tạm dừng ở Unity Editor, thuộc tính này vẫn sẽ được cập nhật liên tục. Phụ thuộc vào nền tảng và thiết bị phần cứng, thuộc tính này có thể trả về giá trị giống nhau trong vài frame liên tiếp.

timeSinceLevelLoad

Thuộc tính sẽ trả về khoảng thời gian bắt đầu từ khi level cuối cùng (scene) được khởi chạy cho đến thời gian bắt đầu của frame hiện tại. 

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024