برنامه نویسی

[System.Serializable] در یونیتی – انجمن DEV 👩‍💻👨‍💻

[System.Serializable] یک ویژگی C# است که می تواند به یک کلاس، ساختار یا فیلد اعمال شود تا نشان دهد که می تواند توسط سیستم سریال سازی Unity سریال شود. با انجام این کار به توسعه‌دهنده اجازه می‌دهد داده‌ها را به صورت محلی (یا از راه دور از طریق API) ذخیره کند و بعداً بارگیری مجدد کند. در اینجا یک مثال ساده از نحوه استفاده از آن آورده شده است [System.Serializable] صفت:

[System.Serializable]
public class PlayerData
{
    public string name;
    public int score;
    public float health;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دلیل استفاده از [System.Serializable] این است که می تواند یک کلاس سفارشی Serializable ایجاد کند، به معنای ذخیره و بارگیری مجدد از دستگاه محلی در قالب متن، مانند Json یا xml.

چه نوع داده هایی را می توان سریال کرد

این شامل:

  • انواع داده های پایه مانند int، float و string
  • آرایه هایی از انواع داده های پایه یا دیگر اشیاء قابل سریال سازی
  • کلاس هایی که اجرا می کنند ISerializable رابط
  • فهرست‌ها، لغت‌نامه‌ها و دیگر انواع مجموعه‌ای که حاوی اشیاء قابل سریال‌سازی هستند

با این حال، برخی از انواع دیگر مانند Transform نمی تواند سریالی شود یا نوع داده سفارشی که کاربر خودش تعریف می کند. بنابراین چگونه می توان آن نوع از انواع داده ها را سریال کرد؟

سری کردن انواع داده های پیشرفته

برای سریال سازی انواع داده های پیشرفته مانند Transform، می‌توانیم یک کلاس wrapper ایجاد کنیم تا مقادیر تبدیلی را که می‌خواهیم سریال‌سازی کنیم، نگهداری کنیم. به عنوان مثال:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TransformSerialize : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("transform: " + gameObject.transform);
        SerializableTransform st = new SerializableTransform(gameObject.transform);
        string json = JsonUtility.ToJson(st);
        Debug.Log("transform json: " + json);
        Transform tf = JsonUtility.FromJson<SerializableTransform>(json).DeserializableTransform()
        Debug.Log("transform json to object: " + tf);
    }

    // Update is called once per frame
    void Update()
    {

    }
}


[System.Serializable]
public class SerializableTransform
{
    public Vector3 position;
    public Quaternion rotation;
    public Vector3 scale;

    public SerializableTransform(Transform transform)
    {
        position = transform.position;
        rotation = transform.rotation;
        scale = transform.localScale;
    }

    public Transform DeserializableTransform()
    {
        GameObject tempGamObject = new GameObject();
        Transform newTransform = tempGamObject.transform; 
        newTransform.position = position;
        newTransform.rotation = rotation;
        newTransform.localScale = scale;
        return newTransform;
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اسکریپت بالا، یک SerializableTransform داریم که می تواند یک Transform Data Serializable را تبدیل کند. همچنین می‌توانیم روشی داشته باشیم که می‌تواند آن را DeserializableTransform به عقب برگرداند.

👉 اگر می خواهید داستان های بیشتری از این دست دریافت کنید، لطفاً کانال من را مشترک کنید تا آخرین به روز رسانی را به موقع دریافت کنید.

**مراجعه: **https://hackingwithunity.com/system-serializable-in-unity/

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا