معماری Scriptable Object بخش اول - ستون های مهندسی
ستون های مهندسی
قبل از اینکه سراغ معماری Scriptable Object بریم بیاید ستون های مهندسی را بررسی کنیم.
سعی کنید همه چیز تا جایی که ممکنه ماژولار ، قابل ویرایش و قابل اشکال زدایی باشه که در ادامه آن را بررسی می کنیم:
ماژولار
سیستم ها نباید مستقیم به هم وابسته باشند
یعنی فرض کنید شما یک Inventory System تو بازیتون دارید که قراره با سیستم های دیگه در تعامل باشه.
اگر شما جوری بنویسیدش که در نبود سیستم های دیگه به مشکل بخوره و وابسته به اونا باشه دیگه ماژولار نیست.
یعنی کدتان نباید مثل یک دیوار آجری باشد که برای تغییر حتماً باید خراب شود!
بلکه مثل لگو انعطاف پذیر باشد یعنی بدون اینکه آن را عوض کنیم بتوانیم با آن هر چیزی را توسعه بدهیم!
سین ها باید مانند صفحات تمیز باشند
کثیف کاری توشون نباشه و هر سین رفتار منحصر به فرد خودش رو داشته باشه و اینطور نباشه که پر از چیز هایی که DontDestroy باشند (منظور Singleton هاست).
تا جایی که ممکنه از Prefab ها استفاده کنید چون دیگه مجبور نیستید دستی تغییر بدید و وقتی تغییرات رو به یک Prefab اعمال می کنید برای بقیه هم اعمال میشه.همچنین پریفب ها طوری باشند که هر کدام عملکرد خودشان را داشته باشند و اطلاعاتشان داخل خودشان باشد.
کمپوننت ها!
سعی کنید کد های خود را به کد های کوچک تر تبدیل کنید و هر کد یک کار را انجام دهد (Single Responsibility) که بتوان از آن در جاهای دیگه به عنوان کمپوننت استفاده کرد.
قابل ویرایش
اطلاعات بازی باید طوری باید که قابل ویرایش باشد
تمرکز روی داده ها
وقتی روی داده ها تمرکز کنیم و تا جایی که ممکن باشد بازی را داده محور(data-driven) پیاده کنیم ، سیستم های ما مانند دستگاه هایی می شوند که داده ها را به عنوان دستورالعمل پردازش می کنند!
به بیان ساده تر سعی کنید Data را از کد هایتان جدا کنید و در قالب Scriptable Object استفاده کنید.
تغییر بازی بدون کدنویسی
کدی که می نویسید باید طوری باشد که گیم دیزاینر و یا آرتیست هم بتواند آن ها را تغییر بدهد و مجبور نباشند مقادیر را در کد عوض کنند.
طراحی اضطراری
کدی که می نویسید باید طوری باشد که به صورت کمپوننت های کوچک باشد و هر کدام کاری را انجام دهد اینطوری گیم دیزاینر بدون نیاز به کدنویسی و با متصل کردن کمپوننت ها می تواند یک تغییر را اعمال کند.
تغییر مقادیر در زمان اجرا
اولین ابزاری که برای تغییر داده ها به کار می رود Inspector هست که بدون نیاز به باز کردن کد می توان مقادیر آن را تغییر داد.
اما یک بدی دارد ؛ وقتی از حالت play-mode خارج می شویم مقادیر آن ها ذخیره نمی شود!
ولی وقتی که از Scriptable Object استفاده کنید در زمان اجرا هم می توانید مقدار آن ها را عوض کنید!
قابل اشکال زدایی
تست در فضای ایزوله (ماژولار بودن)
هر قطعه کدی که می نویسید باید به تنهایی قابل تست باشد.
نمایش اشکال زدایی در Inspector
با استفاده از Custom Editor یونیتی می توانید ابزاری بسازید که به راحتی بتوانید کدتان را Debug کنید.
اشکال زدایی ویژگی های پیاده سازی شده
بعد از اینکه یک ویژگی را در بازی خود اضافه کردید آن را تمام شده حساب نکنید بلکه آن را تست کنید و مطمئن شوید که درست کار می کند
هرگز باگ را fix نکنید زیرا نمی فهمید!
شما باید باگ را دنبال کنید ، آن را بفهمید و بعد آن را در مقابل خانواده آن بکشید!
چنین کاری کار ساده ای نیست و ممکن است شما باگی دیگر ایجاد کنید
مبانی Scriptable Objects
تعاریف اولیه
درواقع Scriptable Object یک کلاس Serializable یونیتی شبیه MonoBehaviour هست که هیچ کمپوننتی مثل Transform نداره که به صورت فایل asset. ذخیره می شود.
کاربرد های ساده Scriptable Object
منبع : Unite Austin 2017 - Game Architecture with Scriptable Objects
مطلبی دیگر از این انتشارات
منحنی(Curve) همه چی تمام در یونیتی _CinemachinePath
مطلبی دیگر از این انتشارات
لود کردن فایل ها از پوشه به بازی در یونیتی -Loading Resources at Runtime
مطلبی دیگر از این انتشارات
معماری Scriptable Object بخش سوم - پیاده سازی