مفهوم Serialization در یونیتی

در علوم رایانه، در زمینهٔ ذخیره‌سازی داده، سریال سازی (serialization) یک فرایند ترجمه است که در آن ساختمان‌های داده، یا حالت شئ، به یک قالب (فرمت) ترجمه می‌شود که آن قالب توانایی ذخیره (مثلا در یک فایل) یا توانایی انتقال (مثلا در بین اتصال پیوند شبکه) دارد، و نیز توانایی بازساخت در آینده (احتمالا در یک محیط رایانه ای متفاوت) را دارد.

پس در واقع یک شئ را سریال سازی می کنیم تا فرمت استانداردی شود تا بتوان همه جا از آن استفاده کرد.

Serialization and Deserialization of the objects
Serialization and Deserialization of the objects


روش های مختلفی برای سریال سازی هست که معروف ترین آنها json , XML ,Yaml می باشند.

مثال ساده

فرض کنید شما قرار است لیستی از اعداد داشته باشید که در نرم افزار های مختلف از آن استفاده کنید

ولی هر کدام از آن نرم افزار ها یک فرمت را قبول می کند!

برای حل این مشکل می توان این اطلاعات را Serialize کرد و استفاده کرد!


مثال پیچیده!

فرض کنید کلاسی دارید که باید تبدیل به فرمت استانداردی شود.

ابتدا ساختار کلی آن را می نویسیم:

بعد این اطلاعات را باید به شکلی بنویسیم که استاندارد باشد یا به اصطلاح سریال سازی شود.

برای این کار می توانیم از Json یا فرمت های دیگر استفاده کنیم.

مفهوم Encapsulation

یکی از مفاهیم مهم زبان های برنامه نویسی پیشرفته ، مفهوم Encapsulation یا کپسوله سازی است.

وقتی می خواهیم یک برنامه بزرگ بنویسیم ، خیلی مهمه که برنامه قابل خوندن باشه.

اگر با مفاهیم access modifier ها آشنا باشید.ما گاهی اوقات نیاز داریم که یک متغیر در یونیتی سطح دسترسی private داشته باشد تا وقتی می خواهیم از کلاس های دیگر به آن کلاس دسترسی داشته باشیم آنها نمایش داده نشوند.

مشکل نمایش دادن متغیر ها در زمان دسترسی
مشکل نمایش دادن متغیر ها در زمان دسترسی


مشکل نمایش private در Inspector

در یونیتی فیلد های private را در Inspector نشان داده نمی شود!

چون در حالت عادی یونیتی سطوح دستری private را Serialize نمی کند به خاطر همین باید آنها را Serialize کنید.

 سریال سازی برای نمایش در Inspector
سریال سازی برای نمایش در Inspector
  • علت اینکه فیلد های public در Inspector قابل مشاهده هستند این است که یونیتی فقط فیلد های public را Serialize می کند.
  • از اتریبیوت [SerializeField] برای سریال سازی field/property استفاده می شود.
  • از اتریبیوت [Serializable] برای سریال سازی class/struct استفاده می شود.

مثال سریال سازی فیلد

https://gist.github.com/smkplus/3af8fd9b3316edcaa68c78d06c1e030f

مثال سریال سازی کلاس

https://gist.github.com/smkplus/444f96a8963c5090159771bc36995f34