STDIO
Tìm kiếm gần đây
    Mục lục
    Thảo luận
    0
    Liên kết
    QR Code

    C# Script - Lớp Time

    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.

    Rye Nguyen

    07/08/2015
    24/09/2020
    4 phút đọc
    C# Script - 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. 

    Lập Trình Game

    Lập Trình Game

    Kiến thức, kỹ thuật, kinh nghiệm lập trình game.

    Đề xuất

    GameObject - Thao Tác Với C# Script

    GameObject - Thao Tác Với C# Script

    GameObject là một khái niệm cơ bản trong Unity. Mọi đối tượng trong game ...

    Lập Trình GameKiến Thức Nâng Cao

    08/08/2015

    C# Script - Lớp Quaternion

    C# Script - Lớp Quaternion

    Quaternion là một thuật ngữ có lẽ khá xa lạ đối với nhiều lập trình ...

    Lập Trình GameUnity

    08/08/2015

    Khám phá thêm

    9 Tính Năng Quan Trọng Trong C++11

    9 Tính Năng Quan Trọng Trong C++11

    C++11 là một phiên bản cải tiến và nâng cấp từ C++98 (hay các bạn vẫn ...

    Modern C++C++0x

    13/08/2015

    Hiện Thực Menu Select Level Với Scroll Rect

    Hiện Thực Menu Select Level Với Scroll Rect

    Đối với các thể loại game giải đố (puzzle), luôn luôn có một hệ thống ...

    Lập Trình GameKiến Thức Nâng Cao

    08/08/2015

    Nhập Xuất Cơ Bản trong C/C++

    Nhập Xuất Cơ Bản trong C/C++

    Bài viết là tiền đề giúp cho người đọc làm quen các thao tác cơ bản với ...

    Modern C++C++98

    18/03/2016

    Interface Trong C#

    Interface Trong C#

    Giới thiệu về interface trong C#, ý nghĩa sử dụng, tính ứng dụng và cách ...

    Huỳnh Minh Tân

    03/10/2017

    Hello World Với Objective-C

    Hello World Với Objective-C

    Giới thiệu ngôn ngữ Objective-C và cách hiện thực chương trình bằng ...

    Dũng Đỗ

    09/12/2015

    Vì Sao Sinh Viên Ngành Khoa Học Máy Tính Học C++ Như 1 Ngôn Ngữ Chính?

    Vì Sao Sinh Viên Ngành Khoa Học Máy Tính Học C++ Như 1 Ngôn Ngữ Chính?

    Vì sao sinh viên ngành Khoa Học Máy Tính nên xem và học C++ như một ngôn ...

    STDIO TrainingGóc nhìn

    23/09/2015

    Tư Duy Tối Ưu Hóa Trong Lập Trình Games - Phần 1: Codes Trong C/C++

    Tư Duy Tối Ưu Hóa Trong Lập Trình Games - Phần 1: Codes Trong C/C++

    Bài viết hướng tối ưu hóa trong lập trình với C++, tối ưu hóa lập trình ...

    Lập Trình GameKiến Thức Nâng Cao

    18/09/2014

    STL - Map Trong C++

    STL - Map Trong C++

    Sử dụng STL Map trong C++, tìm hiểu, các phương thức thường được dùng ...

    Modern C++Nâng cao

    21/09/2014

    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020