برو به محتوای اصلی
سال گذشته پرسیده شده

بر اساس تجربه قبلی یا مطالعات خود چه مدل معماری برای ساخت UI بازی مناسب میدانید؟ به عنوان توضیح بیشتر، برای ارتباط بین جزئی ترین بخش های UI با بدنه اصلی برنامه چه روشی را به کار می‌برید؟ اگر منبع یا مقاله‌ای در این باره میشناسید به اشتراک بگذارید

من کجام؟ اینجا کجاست؟

در جامعه بازی‌سازان ایران می‌تونید در مورد هر موضوعی سوال کنید، به سوالای بقیه جواب بدید و تجربه‌تون رو به اشتراک بگذارید!

علی افروغه
مدیر پروژه/فنی بازی باغ نگار

سوالتون یه مقداری گنگ هست. منظور از معماری چیه ؟ معماری فنی ؟ نحوه‌ی طراحی UX ؟

اگر منظورتون فنی هست، من خودم از تکنیک Publish/Subscribe زیاد استفاده می‌کنم تا وابستگی بین منطق بازی و UI ایجاد نشه. معمولا هم با معماری MVC کد بازی را می‌نویسم. برای مثال یک GameController وجود داره که به طور کلی منطق بازی رو کنترل میکنه و از وقایع با خبره. این کلاس ایونت‌هایی رو داره که در مواقعی خاص (مثل باختن، پیروزی و ...) اون‌ها رو Invoke می‌کنه.

حالا کلاس‌‌های مربوط به UI خودشون رو در این ایونت‌ها Subscribe می‌کنن و ری‌اکشن مناسب رو نسبت به رخداد ایونت‌ها انجام میدن.

برای اینکه Reference های سفت و سختی بین کلاس‌ها نباشه باید از مفهومی به نام Dependency Inversion استفاده کنیم که یک مفهوم انتزاعی است. روش‌های مختلف پیاده سازی داره از جمله Dependency Injection و  Service Locator. من روش Service Locator را در محیط یونیتی مناسب‌تر و راحت‌تر می‌دانم.

منصور جوادی
همکار سابق و دوست فعلی تاد و از اعضای جعبه آبی

مدل‌های معماری مثل مایکروسرویس یا چند لایه یا کتابخانه‌های پیش ساخته ای که اکثرا بر اساس MVC یا MVVM ساخته می‌شوند، برای کل پروژه در نظر گرفته می‌شوند که خود این معماری‌ها شامل الگوهای طراحی نظیر Factory، Light Weight، Observer،Mediator یا Decorator بسته به کاربرد آن‌ها استفاده می‌شود.  

بطور مثال در ساخت یک ListView:

  • برای دسته بندی داده‌های ورودی از LightWeight استفاده می‌شود.
  • برای ارتباط بین ListView و داده‌ها از Mediator و Adopterها استفاده می‌گردد.
  • برای تخصیص سازنده Renderer‌ها از الگوی Factory یا AbstractFactory استفاده می‌شود.
  • برای مشاهده تغییرات ListView از Observer استفاده می‌شود.
  • برای در نظر گرفتن ظاهر Renderer‌ها از Decorator بهره گرفته می‌شود.
     
  • همانطور که مشاهده می‌کنید مجموعه ای از این امکانات میتونه در کارایی بهتر رابط کاربری، تفکیک
     پذیری و خوانش آسان‌تر کد و بسیار مسائل دیگه به ما کمک کنه. اما نکته ای که هست عجله برای استفاده از همه نکنید اگر در ابتدای مسیر هستید سعی کنید در هر پروژه یکی دو تا از این مفاهیم رو امتحان کنید تا به یک روش کدنویسی و تجمیع پروژه برسید.
     

به نظرمن این مبحث در ارتباط مستقیم با سبک ، پلتفرم،مخاطب که می خواد پیاده سازی بشه هست . و بنا به هرکدوم می تونه معماری متفاوتی داشته باشه . به نظرم مقالاتی راجب UX(تجربه کاربری) رو بتونید مطالعه کنید خیلی بیشتر بتونه کمکتون کنه و دیگاه بازتری به شما بده .

 

سوالات مشابه