این سیستم به ما اجازه میدهد تا asset ها ( پریفب ، تکسچر ، صدا و ...) را توسط یک آدرس load کنیم و استفاده کنیم.
نحوهی کار به این صورت هست که به هر asset یک آدرس منحصر به فرد ( یک string ) نسبت می دهید. حال می توانید در کد این asset را با همان آدرس Load کنید. می توانید تعیین کنید که هر asset به چه صورت بیلد شود ، به صورت local در بیلد اصلی حضور داشته باشد یا asset bundle از آن ساخته شود تا بعدا از سمت سرور دانلود شود. اطلاعات مربوط به asset ها در catalog map ذخیره می شود.
مزایای این روش:
- زمان فراخوانی برایمان اهمیتی ندارد این asset در کجا قرار دارد ، به صورت local در پروژه موجود هست یا به صورت یک asset bundle در یک سرور ریموت قرار دارد. ما تنها تقاضای load میکنیم و سیستم با توجه به catalog map که قبلا ساخته میداند این asset کجاست و آن را برای شما load می کند. پس اگر تصمیممان در هر لحظه از تولید پروژه عوض شد که asset ایی مثلا در package اصلی بازی نباشد و به صورت محتوای دانلودی باشد کافی است آن asset را به گروه asset هایی که ریموت هستند منتقل کنیم.
- مدیریت اتوماتیک dependency های Asset Bundle. اگر قبلا با Asset Bundle ها کار کرده باشید حتما میدانید که وقتی یک asset bundle به asset bundle دیگری وابسته است باید ابتدا تمام وابستگی های آن را دانلود و فراخوانی کنید تا بتوانید asset bundle اصلی لود شود. اما با استفاده از Addressables این کار را این سیستم بر عهده می گیرد و شما وقتی درخواست asset ایی بکنید تمام وابستگیهای آن را برای شما لود می کند و شما آماده و پرداخته asset را تحویل می گیرید.
- همچنین Unload کردن asset ها و Asset Bundle ها نیز راحت شده و به راحتی میتوانید هنگامی که با asset دیگر کاری نداشتید آن را unload کنید. مخصوصا این موضوع برای asset هایی که مستقیم به آنها رفرنس میدادیم در داخل scene می تواند مفید باشد. شما اگر رفرنس مستقیمی به یک asset داشته باشید هرچند آن را اصلا استفاده نکنید آن asset در هنگام بارگذاری scene ، بارگذاری می شود. اما خب با استفاده از Addressables می توانید هرگاه نیاز داشتید آن asset را لود کنید و وقتی هم دیگر نیازی به آن نبود آن را unload کنید.
- راحت شدن آپدیت دادن برای Asset Bundle ها. فرض کنید شما تصمیم گرفتید یک Asset Bundle را عوض کنید و یک Asset Bundle جدید جایگزین کنید ، حال کاربرانی که در قدیم این Asset Bundle را دانلود کرده اند و ذخیره کردند تکلیفشان چیست ؟ در این حال شما باید سیستمی را خودتان توسعه می دادید که از تغییر Asset Bundle ها با خبر می شدید (مثلا با یک checksum ) و دوباره asset bundle جدید را دانلود میکرد. اما با این سیستم کافی است تعیین کنید که catalog map نیز از سمت سرور دانلود شود. حال می توانید یک بیلد جدید برای asset ها بگیرید و آن ها را به همراه catalog map جدید به سرور منتقل کنید ، سیستم متوجه تغییرات شده و asset bundle های جدید را دانلود می کند.
خب به نظر میرسد که به به چه چیز خوبی همه بریم ازش استفاده کنیم. اما این چند تا نکته رو باید در نظر بگیریم مخصوصا برای پروژه هایی که مدتی از زمان توسعه آن ها گذشته و تغییرات در آنها سخت تر است:
- این سیستم نسبت به Asset Bundle ها High level تر است. میدونید قانونی وجود داره که هر چقدر ابزاری که استفاده میکنیم high level تر باشد معمولا ما کنترل کمتری داریم روی روند اتفاقات و جزئیات. هرچند این سیستم یک سیستم جایگزین Asset Bundle قدیمی نیست و بلکه از آن استفاده میکند اما شما با استفاده از این API جدید قدرت کنترل قبلی را ندارید. (در اکثر موارد البته نباید مشکلی باشه)
- بارگذاری asset ها را باید به صورت Async هندل کنید. این سیستم تماما Async کار می کند و شما نیز باید معماری خود را بر این اساس بچینید ، هر چند می توان با کلکهایی آن را به صورت synchronous اجرا کرد اما توصیه نمیشود.
برای استفاده از این پکیج در قسمت Package Manager داخل یونیتی پکیج Addressables را نصب کنید.