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!

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
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
Tương tác với Object đa nền tảng trong Unity
Với phần lớn game trên smartphone, việc tương tác với object trong game đa phần là dùng ngón tay. Vấn đề đặt ra ở đây là việc phát triển...
Command Pattern và ứng dụng trong Unity – Phần 1
Trong lập trình game, việc tương tác, điều khiển của người chơi với game là rất quan trọng. Do vậy, command pattern được sử dụng rộng rãi và phổ...
Hitbox và Hurtbox trong Unity3D
Phàm từ xưa đến nay, nhiều chuyện nghĩ thì đơn giản nhưng lúc bắt tay vào làm thì gặp rất nhiều vấn đề đau đầu. Ví dụ khi một...
0
Rất thích suy nghĩ của bạn, hãy bình luận.x