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 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.
Khi bạn đăng nhập lần đầu tiên bằng nút Đăng nhập Xã hội, chúng tôi thu thập thông tin hồ sơ công khai tài khoản của bạn được chia sẻ bởi nhà cung cấp Đăng nhập Xã hội, dựa trên cài đặt quyền riêng tư của bạn. Chúng tôi cũng nhận được địa chỉ email của bạn để tự động tạo tài khoản cho bạn trong trang web của chúng tôi. Khi tài khoản của bạn được tạo, bạn sẽ đăng nhập vào tài khoản này.
Không đồng ýĐồng ý
Kết nối với
Tôi cho phép tạo tài khoản
Khi bạn đăng nhập lần đầu tiên bằng nút Đăng nhập Xã hội, chúng tôi thu thập thông tin hồ sơ công khai tài khoản của bạn được chia sẻ bởi nhà cung cấp Đăng nhập Xã hội, dựa trên cài đặt quyền riêng tư của bạn. Chúng tôi cũng nhận được địa chỉ email của bạn để tự động tạo tài khoản cho bạn trong trang web của chúng tôi. Khi tài khoản của bạn được tạo, bạn sẽ đăng nhập vào tài khoản này.
Không đồng ýĐồng ý
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận
Tôi đã may mắn vì tôi không bao giờ từ bỏ việc tìm kiếm. Rất vui nếu bạn tìm được thông tin từ Gini Webseo.