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

    Kỹ Thuật Debug Trong Unity

    Khi lập trình ra một sản phẩm nào đó, hầu hết sẽ đi kèm với những bug – 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ỏ hết tất cả các lỗi để có thể đưa sản phẩm hoàn thiện ra thị trường. Bài viết sau sẽ hướng dẫn bạn các thao tác cần thiết và kĩ năng debug trong Unity.

    Rye Nguyen

    06/08/2015
    6 phút đọc
    Kỹ Thuật Debug Trong Unity

    Giới thiệu

    Khi lập trình ra một sản phẩm nào đó, hầu hết sẽ đi kèm với những bug – 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ỏ hết tất cả các 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 đa phần đều 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. Tuy nhiên, nếu không có công cụ debugger, chúng ta hoàn toàn có thể tự phát hiện và sửa lỗi bằng cách in một thông điệp nào đó ra màn hình tương ứng với đoạn code. Bạn đọc có thể đọc thêm tại Các Vấn Đề Về Debug Cơ Bản. Bài viết này sẽ hướng dẫn bạn các thao tác cần thiết và kĩ năng debug trong Unity.

    Kiểm tra tính thực thi

    Trước khi sửa lỗi chương trình, bạn phải khoanh vùng được đ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ề phần kinh nghiệm của mỗi người nên tôi không đề cập chi tiết trong bài viết.

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

     ss_1

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

    • Script chưa được gắn vào một Game Object 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ý, ta 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 mong muốn, ta cầ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, bạn có thể theo dõi một hoặc nhiều đối tượng cụ thể và dần 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. Do đó các công cụ Debug chỉ giúp bạn có thể 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 một loạt các hàm hỗ trợ debug khá mạnh và tiện dụng thuộc lớp Debug. Dưới đây tôi sẽ giới thiệu một số thành phần cơ bản và quan trọng nhất của lớp Debug.

    Log

    Debug.Log là hàm được sử dụng nhiều nhất trong việc 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ề một đố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 một 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. Các bạn có thể tham khảo thêm ở link cuối bài viết.

    Draw

    Ngoài việc hiển thị ra màn hình Console giá trị của một đối tượng, Unity còn hỗ trợ việc vẽ một đường thẳng lên màn hình. Khi cần xem xét cụ thể, ta 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, duration và depthTest đều mang sẵn giá trị mặc định. Một đường thẳng sẽ được vẽ trong cửa sổ Scene, với hai đầ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, ta 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);

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

    Lưu ý: Hai 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, bạn hãy mở tuỳ chọn hiển thị Gizmo ở cửa sổ Game.

    Break

    Trong một số trường hợp, ta 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 sẽ giúp chúng ta thực hiện công việc này. 

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

    isDebugBuild

    Khi đưa sản phẩm hoàn thiện ra thị trường, hiển nhiên ta 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 đó ta 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 chúng ta không sử dụng một đ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 chúng ta một 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, các bạn có thể tham khảo phần demo ở cuối bài viết.

    Download Demo

    STDIO_UnityDebug

    ss_2

    Tài liệu tham khảo

    http://docs.unity3d.com/ScriptReference/Debug.html - 16/04/2015.

    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

    Phép Tích Chập Trong Xử Lý Ảnh (Convolution)

    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 ...

    Computer VisionNền tảng

    20/04/2016

    Khám phá thêm

    Ứng Dụng Của StartCoroutine Trong Unity

    Ứng Dụng Của StartCoroutine Trong Unity

    Khi tiếp nhận và xử lý các sự kiện thu được, có những lúc chúng ta cần ...

    Lập Trình GameUnity

    08/08/2015

    Âm Thanh Trong Unity

    Âm Thanh Trong Unity

    Âm thanh trong game như một chất xúc tác nhằm kích thích các giác quan ...

    Lập Trình GameUnity

    05/08/2015

    Giới Thiệu về Kỹ Thuật Phần Mềm – Software Engineering

    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 ...

    Trung Nguyễn

    22/09/2014

    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

    Hiện Thực Game Zero Với Unity - Phần 1 - Nhận Sự Kiện Button

    Hiện Thực Game Zero Với Unity - Phần 1 - Nhận Sự Kiện Button

    Tôi tiếp tục chuỗi bài viết giúp bạn đọc xây dựng một game đơn giản thực ...

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

    09/08/2015

    Vector 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 ...

    Lập Trình GameUnity

    08/08/2015

    Load Sprite trong DirectX 9

    Load Sprite trong DirectX 9

    Thao tác với Sprite, Sprite animation là một trong những kỹ thuật cần ...

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

    10/10/2017

    Các Kỹ Thuật Lập Trình Căn Bản

    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 ...

    Modern C++C++98

    15/09/2015

    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