تکنیک 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#

خوشحال میشم نظرتون رو راجب این تکنیک بخونم.