برنامه نویس hossien014.github.io
تکنیک Object Pooling چیست و چطور راندمان بازی شما را افزایش می دهد _unity
بسم الله الرحمن الرحیم
اول از همه اشاره کنم که Object Pooling مختص به یونیتی نیست و صرفا یک روش برای بهینه کردن بازی است .
برنامه نویسی به روش عادی
عکس پایین را در نظر بگیرید و فرض کنید یک سفینه دارید که با هر بار کلیک کردن تعدادی گلوله شلیک می کند . روش کد نویسی عادی اینطور است که شما با هر بار کلیک در نوک سفینه یک گلوله را Instantiate
می کنید که حتما می دانید که Instantiate
عملیاتی است که باعث افت رندمان بازی می شود زیرا هر بار باید گلوله را در رم (Heap) جاگذاری کند و بعد از نابود شدن گلوله garbage collector باید وارد کار بشود و آن قسمت از رم را پاکسازی کند . حالا فرض کنید که عملیات بارها و بارها باید انجام شود.
برنامه نویسی به روش Object Pooling
اگر بخواهیم همین مکانیزیم شلیک را به روش Object Pooling پیاده سازی کنیم باید در همان ابتدای بازی یک لیست درست کنیم و مقداری گلوله را (مثلا 30 عدد) را Instantiate
کنیم و بلافاصله انها را غیر فعال کنیم که در بازی قابل مشاهده نباشند. حالا هر وقت پلیر دکمه شلیک را زد بجای Instantiate
کردن یکی از گلوله هایی که در ابتدای بازی ساختیم را به نوک سفینه انتقال می دهیم و سپس فعال می کنیم.
حالا هر وقت آن گلوله به چیزی بر خورد کرد یا از صفحه خارج شد بجای نابود کردن گلوله آن را دوباره غیر فعال می کنیم و هروقت نیاز شد دوباره همان را به نوک سفینه انتقال می دهیم و دوباره فعال اش می کنیم.
با این روش دیگر نیاز نیست هر بار عملیات سنگین Instantiate
را برای ابجکتی که قرار است به زودی نابود شود انجام دهیم و تعداد زباله هایی که این کد می سازد به شدت کمتر است .
برای مطالعه بیشتر و دیدن نمونه کد :
https://learn.unity.com/tutorial/introduction-to-object-pooling#
خوشحال میشم نظرتون رو راجب این تکنیک بخونم.
مطلبی دیگر از این انتشارات
الگو های طراحی در یونیتی
مطلبی دیگر از این انتشارات
touch in unity | کار با تاچ در یونیتی (آپدیت شد !)
مطلبی دیگر از این انتشارات
معرفی پایگاه حفظ، نشر و دانلود بازیهای ایرانی و بازیهای دوبله به فارسی