GIZMOS IN UNITY

Trong nhiều Game engines khác nhau hầu hết đều hỗ trợ debug cho các đường thẳng hình khối bằng cách vẽ chúng ra nó thườngd dược gọi tên gợi tới việc vẽ đường thằng, hình khối debug như DrawDebugLine hay DrawDebugBox. Tương tự với các engines đó thì Unity cũng có công cụ hỗ trợ cho việc debug được gọi là Gizmos. Trong lớp Gizmos cũng có các phương thức, thuộc tính hỗ trợ tốt cho việc vẽ đường hay box debug.

I.Các phương thức cơ bản của Gizmos:

Tạo file MyGizmos.cs:

using UnityEngine;
using System.Collections;
public class MyGizmos : MonoBehaviour {
    void Start () {
    }
    void Update () {
    }
    void OnDrawGizmos () {
        Gizmos.DrawCube(new Vector3(0, 0, 0), new Vector3(1, 2, 3));
    }
}

trong phương thức DrawGizmos có 2 tham số truyền vào là điểm gốc và size của khối. Run trên Unity ta sẽ nhận được kết quả sau:

12.png

Trên đây chúng ta đã sử dụng phương thức DrawCube ngoài ra chúng ta cũng có thể sử dụng các phương thức khác 1 cách đơn giản như DrawRay:

void OnDrawGizmos () {
    Ray r = new Ray();
    r.origin = new Vector3(0, 0, 0);
    r.direction = new Vector3(0, 1, 0);
    Gizmos.DrawRay(r);
}

Kết quả chúng ta thu được 1 đường màu trắng bắt đầu từ điểm gốc và hướng theo vector điều hướng direction cần vẽ :11.png

Ngoài ra chúng ta còn có thể sử dụng rất nhiều các phương thức khác mà Gizmos đã cung cấp cho chúng ta.

II. Sử dụng Gizmos trong debug:

Trong nhiều game thì quái vật luôn định hướng tới Player để có thể tấn công Player gây khó khăn cho Player. Khi quái vật định hướng tới Player trong khoảng nhìn thấy của quái vật thì nó sẽ di chuyển tới gần Player. Vậy ta có thể dùng Gizmos để vẽ đường để kiểm tra xem hướng đi của quái vật đã đúng hướng tới Player hay chưa. Tạo file Monster.cs :

using UnityEngine;
using System.Collections;
public class Monster : MonoBehaviour {
    public GameObject PlayerObject;
    Vector3 direction;
    void Start () {
        GameObject[] AllGameObjects = GameObject.FindObjectsOfType(typeof(GameObject)) as GameObject[];
        foreach (GameObject aGameObject in AllGameObjects) {
            Component aComponent = aGameObject.GetComponent(typeof(Player));
            if (aComponent != null) {
                PlayerObject = aGameObject;
            }
        }
    }
    void Update () {
        direction = PlayerObject.transform.position - transform.position;
    }
    void OnDrawGizmos() {
        Gizmos.DrawLine (transform.position, transform.position + direction);
    }
}

Run Unity ta sẽ thấy được kết quả điều hướng của quái vật đến Player có đúng hay không:

13.png

Ta thấy đường thẳng điều hướng từ quái vật tới thẳng nhân vật như thế đã hoàn toàn chính xác. Từ việc điều hướng chính xác này ta hoàn toàn có thể để quái vật di chuyển tới player. Và để trạng thái nếu trong khoảng có thể tấn công được thì ta sẽ cho quái vật tấn công Player. Ta thêm các câu lệnh vào Monster.cs để được 1 file script hoàn chỉnh:

public float AttackRange = 3.0f;
public float Speed = 0.01;
void Update () {
    Vector3 MyVector = PlayerObject.transform.position - transform.postion;
    float Distance = MyVector.magnitude;
    if (Distance > AttackRange) {
        direction = Vector3.Normalize(PlayerObject.tranform.postion - tranform.postion);
        transform.position += direction * speed;
    }
}

Kết quả thu được là nếu player còn nằm ngàoi khả năng tấn công của quái vật thì quái vật sẽ tiến dần tới Player theo hướng mà ta đã dùng Gizmos xác định là hướng thẳng từ quái vậy thẳng tới Player. Như vậy Gizmos chính là 1 công cụ hiệu quả để ta có thể debug cho đường thẳng, hay các hình khối đã đúng với yêu cầu đặt ra chưa chỉ bằng các câu lệnh đơn giản sử dụng các phương thức mà Gizmos đã cung cấp cho chúng ta. Mở rộng việc sử dụng Gizmos chính là trong việc có rất nhiều quái vật cùng với nhiều Player ta cần phải điều hướng chính xác cho quái vật để quái vật có thể tới gần và tấn công Player gần nhất làm tăng tính hấp dẫn của game.


All Rights Reserved