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