Lưu chỉ số nhân vật với Scriptable Object
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.
Sau khi tạo xong các bạn sẽ có asset CharacterData và trên Inspector sẽ hiển thị như sau:
Mình sẽ thiết lập các chỉ số của nhân vật như sau:
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 đó.
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!