سلام میخواستم بدونم راهکار شما برای مدیریت component هایی مثل game manager(که شرط برد و باخت و یا چیز های دیگه در اون هست) یا UI Manager(که ممکنه ui مختلف یا رفتار مختلف داشته باشه) در هر game mode جدا چی هست؟
مثلا یک بازی FPS رو با mode های مختلف
capture the flag, free for all, team death match در نظر بگیرید.
اگه ObjectOriented نگاه کنیم هر GameMode یه کلاس جداست که شرایط برد و باخت توی خودش هندل میشه. GameManager وظیفه نداره شرایط برد و باخت رو تعیین یا چک کنه. فقط میتونه بگه یه بازی با مود فلان و با فلان تعداد بازیکن رو لود کن و وقتی تموم شد بهم بگو.
وقتی هر GameMode کلاس جداگانه ای داشته باشه، نیازمندیهاش رو هم خودش تعیین میکنه. دیگه نگران این نیستیم که بخوایم با چندین شرط مختلف تعیین کنیم که کدوم ui رو برای کدوم گیممود لود کن. هر گیم مد ui خودش رو میسازه. حالا یا خودش لود میکنه و میسازه و یا از کسی که وظیفهش لود کردنه محترمانه درخواست میکنه که فلان Ui رو میخوام و به چیزی که میخواد میرسه.
سلام دقیقاً این یکی از مشکلات الگوی سینگلتونه
نمیشه با سینگلتون Polymorphism رو پیاده کرد:
چون از شئ گرایی پیروی نمی کنه ، نمی تونه Polymorphism داشته باشه در نتیجه نمیشه رفتار های متفاوت براش تعریف کرد.
به خاطر همین شما ناچارید که کلاس های جداگانه تعریف کنید مثل
GameModeA_PlayerManager
GameModeB_PlayerManager
مقالش رو اینجا نوشتم می تونید مطالعه کنید:
https://vrgl.ir/MQ4MK
البته همون طور که آقای امید سعادت گفتند شما لازم نیست برای هر GameMode یک Manager داشته باشید
طبق اصل OpenClosed باید شرط ها داخل هر کلاس تعریف بشه
https://vrgl.ir/O9AYr
همچنین شما می تونید از ScriptableObject استفاده کنید:
خوبی این روش اینه که منطق بازی رو می تونید به صورت پازل در بیارید و استفاده کنید.
آقا چقدر لذت بردم که توی مثال، کلاس GameMode یه ScriptableObject هست! به امید روزی که این روش کاربردی فراگیرتر بشه :)
ممنون (:
اگر براتون جالبه پیشنهاد می کنم این مجموعه آموزش رو حتماً ببینید
با ScriptableObject یک State Machine برای AI می نویسه
بعد دیگه نیازی به کدنویسی نیست و کد ها رو درقالب Asset میشه استفاده کرد!
Pluggable AI With Scriptable Objects