Lưu chỉ số nhân vật với Scriptable Object

26 Tháng sáu, 2024

Scriptable Object (SO) là một asset để lưu trữ dữ các dữ liệu tĩnh. Không chỉ vậy, các lập trình viên có thể dùng SO vào nhiều mục đích khác nhau. Bài viết này mình sẽ hướng dẫn các bạn dùng SO để lưu trữ chỉ số của nhân vật trong game

Tại sao dùng Scriptable Object

Các dữ liệu tĩnh trong một game có thể lưu dưỡi dạng file text như json, xml, txt,.. . Và được load vào game từ Resoucres. Về cơ bản dùng SO hoặc các dữ liệu dưới dạng file text đều được. Điểm khác biệt duy nhất có lẽ là về tốc độ load dữ liệu và đó cũng là nhược điểm của dữ liệu dạng file text.

Thềm vào đó, SO còn có thể chứa được các assets như sprites, audio,.. Việc chỉnh sửa dữ liệu của SO đều thực hiện trên Inspector của Unity Editor nên rất trực quan và nhanh.

Lưu chỉ số nhân vật với Scriptable Object

.Lan man phần trên đủ rồi, mình sẽ vào phần chính luôn. Mục đích của mình là lưu chỉ số của nhân vật. Vậy đầu tiên mình sẽ tạo class Stats.cs mang các chỉ số cơ bản của một nhân vật.

[System.Serializable]
public class Stats
{
    public float damage;
    public float defense;
    public float maxHp;
    public float moveSpeed;
}

Tiếp đó mình sẽ viết scripts để tạo được asset dưới dạng SO.

[CreateAssetMenu(fileName = "CharacterData", menuName = "ScriptableObject/CharacterData")]
public class CharacterData : ScriptableObject
{
    public int id;
    public Stats stats;
}

Để có tạo một SO thì class đó phải kế thừa từ lớp ScriptableObject được dựng sẵn của Unity. Attribute [CreateAssetMenu] giúp bạn thiết lập đường dẫn để tạo asset SO đó.

Tiếp theo mình sẽ tạo một folder Data để chứa các SO của nhân vật. Để tạo được asset SO, click chuột phải vào folder vừa tạo và theo đường dẫn Create/ScriptableObject/CharacterData.

Create/ScriptableObject/CharacterData.
Create/ScriptableObject/CharacterData.

Sau khi tạo xong các bạn sẽ có asset CharacterData và trên Inspector sẽ hiển thị như sau:

Hiển thị Inspector
Hiển thị Inspector

Mình sẽ thiết lập các chỉ số của nhân vật như sau:

Thiết lập chỉ số nhân vật
Thiết lập chỉ số nhân vật

Vậy là công việc đã hoàn thành xong 90% rồi. Bước cuối cùng chỉ cần tạo script cho nhân vật và load các chỉ số từ SO vào là xong. Dưới đây là script Character của mình.

public class Character : MonoBehaviour
{
    // Khai báo ScriptableObject chứa data của nhân vật
    public CharacterData characterData;
    private void Start()
    {
        // Hiện các chỉ số ra cửa sổ Debug
        Debug.Log(string.Format("id={0}; damage={1}; defense={2}; maxHp={3}; moveSpeed={4}", characterData.id, characterData.stats.damage,
            characterData.stats.defense, characterData.stats.maxHp, characterData.stats.moveSpeed));
    }
}

Khi đã có script nhân vật, chúng ta kéo asset SO vừa tạo vào object chứa script Character là dữ liệu đã được gán cho object Character đó.

Gán object Character
Gán object Character
Kết quả khi play
Kết quả khi play

Kết

Công dụng của Scriptable Object trong Unity không chỉ dừng lại ở lưu trữ dữ liệu tĩnh. Do đó, mình sẽ viết thêm nhiều bài hướng dẫn về các ứng dụng cụ thể của SO.

Chúc các bạn thành công!

guest
0 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Tin tức liên quan
Hướng dẫn lấy đường dẫn các page Woocommerce 3.x
Chắc hẳn ai dùng Woocommerce đều sẽ muốn hiển thị đường dẫn của trang tài khoản, cửa hàng, thanh toán, giỏ hàng,.. Có rất nhiều phương án xử lý...
Hướng dẫn tạo sản phẩm Woocommerce có biến thể đẹp mắt
Mình đọc bình luận thấy khá nhiều bạn kêu gặp khó khăn trong vấn đề tạo sản phẩm có biến thể, hay sản phẩm có biến thể không được...
Hướng dẫn thêm Confirm Password trong Registration Page và Checkout Page
Tình trạng spam tài khoản, hay khách hàng không nghiêm túc trong việc tạo tài khoản để spam đơn hàng. Mình khuyến khích các bạn thêm một field nhập...