STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

    Kỹ Thuật Debug trong Unity

    Hướng dẫn các thao tác và kỹ thuật debug code trong Unity.

    Rye Nguyen

    06/08/2015
    25/09/2020
    5 phút đọc
    Kỹ Thuật Debug trong Unity

    Khi lập trình phần mềm, hầu hết đi kèm với những bugs - lỗi lập trình. Lỗi có thể do nhiều nguyên nhân khác nhau nhưng mục tiêu cuối cùng của sản phẩm là loại bỏ thật nhiều lỗi để có thể đưa sản phẩm hoàn thiện ra thị trường.

    Để phát hiện lỗi, các bộ công cụ phát triển phần mềm hiện nay tích hợp chức năng debug, giúp lập trình viên tìm kiếm, sửa lỗi được dễ dàng và hiệu quả hơn bằng các phương pháp trực quan.

    Kiểm tra tính thực thi

    Trước khi sửa lỗi chương trình phải khoanh vùng đoạn code bị lỗi, phạm vi càng thu hẹp càng tốt. Việc khoanh vùng và xác định đoạn code lỗi thuộc về kinh nghiệm lập trình.

    Sau khi đã khoanh vùng phần code lỗi, cần xem xét tính thực thi của đoạn code bằng cách phát ra 1 thông điệp nào đó, ở đây sử dụng hàm Log thuộc lớp Debug trong Unity.

    ss_1

    Nếu thông điệp không được hiển thị, 1 trong những trường hợp sau đã xảy ra:

    • Script chưa được gắn vào 1 GameObject nào trong chương trình.
    • Hàm chứa đoạn code thông điệp không được gọi.
    • Thông điệp nằm trong nhánh code không được thực thi (thường gặp với các cấu trúc rẽ nhánh if... else, switch... case, ...).

    Để xử lý, cần xem xét cẩn thận và dựa vào logic của game để chỉnh sửa lại cho phù hợp.

    Kiểm tra tính logic

    Khi chắc chắn đoạn code được thực thi nhưng chương trình vẫn chạy không như mong muốn, tiến hành quan sát sự thay đổi của các đối tượng liên quan theo thời gian. Vẫn dùng hàm Log thuộc lớp Debug, có thể theo dõi 1 hoặc nhiều đối tượng cụ thể để tìm ra nguyên nhân gây ra lỗi.

    Việc khắc phục lỗi về logic game thuộc về khả năng đọc code và phân tích bài toán, các công cụ Debug chỉ giúp sửa lỗi được dễ dàng hơn, việc sửa lỗi sẽ phụ thuộc nhiều vào bản thân lập trình viên.

    Các hàm quan trọng và chức năng

    Unity cung cấp 1 loạt các hàm hỗ trợ debug tiện dụng thuộc lớp Debug.

    Log

    Debug.Log là hàm được sử dụng nhiều nhất trong kiểm tra và sửa lỗi chương trình, hàm Log có chức năng hiển thị ra màn hình Console (Windows  → Console) các thông tin về 1 đối tượng trong game.

    Kiểu dữ liệu mà hàm nhận vào là Object, do đó với mọi loại dữ liệu thì hàm đều có thể in ra cửa sổ Console của Unity Editor, tuỳ theo cách hiển thị của kiểu dữ liệu.

    Các kiểu dữ liệu thường được lập trình viên sử dụng với hàm Log bao gồm int, float, string, dữ liệu kiểu mảng, ...

    Các kiểu dữ liệu do Unity định nghĩa như Vector2, Vector3, Quaternion, ... cũng được hiển thị chi tiết.

    Ngoài hàm Log nói trên, Unity còn cung cấp 1 số hàm Log nâng cao nhưng ít phổ biến đối với lập trình viên chưa có nhiều kinh nghiệm. 

    Draw

    Ngoài việc hiển thị ra màn hình Console giá trị của 1 đối tượng, Unity hỗ trợ vẽ 1 đường thẳng lên màn hình. Khi cần xem xét cụ thể, sử dụng hàm DrawLine để vẽ, hàm có nguyên mẫu như sau:

    public static void DrawLine(Vector3 start, Vector3 end, Color color = Color.white, float duration = 0.0f, bool depthTest = true);

    Trong đó các giá trị color, durationdepthTest đều mang sẵn giá trị mặc định. 1 đường thẳng sẽ được vẽ trong cửa sổ Scene, với 2 đầu mút được quy định rõ ràng.

    Trong trường hợp cần quan sát hướng của đối tượng, sử dụng hàm DrawRay , cách sử dụng hàm tương tự như với hàm DrawLine:

    public static void DrawRay(Vector3 start, Vector3 dir, Color color = Color.white, float duration = 0.0f, bool depthTest = true);

    1 đường thẳng sẽ được vẽ từ điểm bắt đầu cho đến start + dir. Ray (tia) là 1 đường thẳng vô hạn không có điểm kết thúc nhưng Unity Editor sẽ chỉ minh hoạ 1 phần của tia.

    * 2 hàm Draw thuộc lớp Debug sẽ vẽ lên cửa sổ Scene, nếu muốn hiển thị trực tiếp lên màn hình Game, mở tuỳ chọn hiển thị Gizmo ở cửa sổ Game.

    Break

    Trong 1 số trường hợp cần chương trình tạm dừng lại để xem xét sự thay đổi của các đối tượng trong game, hàm Break trong lớp Debug giúp thực hiện công việc này. 

    Hàm Break thực sự trở nên hữu ích khi cần dừng chương trình tại 1 thời điểm cụ thể, cũng có thể sử dụng công cụ Debugger có sẵn trong Visual Studio hay Mono Develop, nhưng sẽ không xem xét được các đối tượng 1 cách trực quan.

    isDebugBuild

    Khi đưa sản phẩm hoàn thiện ra thị trường, hiển nhiên không cần đến các đoạn code Debug nữa vì đã khắc phục triệt để các vấn đề liên quan, do đó nên loại bỏ các đoạn Debug này ra khỏi sản phẩm.

    Với hàng chục, thậm chí hàng trăm file script với nhiều dòng code, việc xoá từng dòng Debug thủ công là điều gây lãng phí thời gian và công sức, đồng thời thể hiện sự thiếu chuyên nghiệp trong công việc. Vậy tại sao không sử dụng 1 điều kiện trước khi gõ dòng code Debug thông thường để kiểm soát việc này?

    Trong lớp Debug, Unity cung cấp cho 1 thuộc tính để kiểm tra trạng thái của sản phẩm - thuộc tính isDebugBuild. Thuộc tính này sẽ trả về true nếu như sản phẩm vẫn đang trong quá trình hoàn thiện (thường gọi là Beta Release). Trạng thái của sản phẩm có thể được tìm thấy tại cửa sổ Build Setting (Ctrl + Shift + B), check box "Development Build". Ngoài ra tại cửa sổ Unity Editor, thuộc tính này luôn mang giá trị là true.

    Cách sử dụng cùng với ví dụ minh hoạ cho việc sử dụng các hàm thuộc lớp Debug, tham khảo phần demo ở cuối bài viết.

    Download demo

    STDIO_UnityDebug.zip

    ss_2
    0 Bình luận
    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

    Ứng Dụng Của StartCoroutine Trong Unity
    Giới thiệu khái niệm Coroutine và hướng dẫn hiện thực Coroutine trong ...
    Phép Tích Chập Trong Xử Lý Ảnh (Convolution)
    Convolution là kỹ thuật quan trọng trong Xử Lý Ảnh, được sử dụng chính ...

    Khám phá

    Giới Thiệu về Kỹ Thuật Phần Mềm – Software Engineering
    Software Engineering là một phần của System Engineering - liên quan đến ...
    22/09/2014
    Âm Thanh Trong Unity
    Hướng dẫn cách phát âm thanh trong Unity.
    Vector Trong Unity
    Giới thiệu và hướng dẫn sử dụng các đối tượng cơ bản thuộc lớp Vector3 ...
    Các Kỹ Thuật Lập Trình Căn Bản
    Khi mới bắt đầu học lập trình, thường thì các bạn sẽ giải các bài tập ...
    15/09/2015
    Xử Lý Ảnh Với OpenCV: Lọc Số Trong Ảnh
    Giới thiệu lọc số ảnh, khái niệm và công thức nhân chập ma trận, một số ...
    Phân Biệt Awake và Start trong Unity
    Phân biệt phương thức Awake và phương thức Start trong Unity.
    Hiệu Ứng Camera Zoom Trong Unity
    Hướng dẫn hiện thực hiệu ứng Camera Zoom trong Unity
    Thông Số Kỹ Thuật Arduino Uno R3 - Các Biến Thể và Lưu Ý
    Arduino board có rất nhiều phiên bản với hiệu năng và mục đích sử dụng ...
    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích. Tìm hiểu thêm.
    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