اشنایی با DOTS در یونیتی entity spawn

قسمت اول: اشنایی با DOTS و توضیح علمکرد این تکنولوژی در انجین unityتو این قسمت سیستم DOTS رو نصب میکنیم و سعی میکنیم یه spawner ساده برای تست راه بندازیمتوجه: این اخرین ورژنی هستش که خودم با یونیتی تست کردم ممکنه به خاطر اپدیت ها در اینده این کد ها تغییر پیدا بکنن چون این سیستم هنوز در حال تکامل هست و نهایی نشده و این مقاله با استفاده از یونیتی 2019.3 تست شده و خروجی گرفته شده.توجه2: این مقاله هم مثل مقاله قبلی برای افراد متوسط به بالای یونیتی مناسب هستش.اول از همه لازمه که پکیج های DOTS رو نصب کنیم (این سیستم به صورت پکیج منتشر شده) برای اینکار لازمه از داخل پکیج منیجر یونیتی پکیج های لازم برای این سیستم رو دانلود بکنیم.پکیج منیجر یونیتی رو میتونید با انتخاب window و انتخاب گزینه package manager باز کنید.چون یه تعداد از پکیج های DOTS هنوز در حالت preview هستن با انتخاب گزینه advanced و از انتخاب گزینه show preview packages مطمئن بشید که اون پکیج ها هم براتون نشون داده بشه (البته اگه از یونیتی 2020 استفاده میکنید این گزینه به جای دیگه ای منتقل شده که با یه سرچ ساده میتونید پیداش بکنید) در اخر هم مطمئن بشید که گزینه کنار علامت + به جای in project در حالت all packages باشهخب به ترتیب پکیج های مورد نیاز رو با توضیحاتی که چی هستند رو نصب میکنیم:Burst: کامپایلری که در قسمت قبل دربارش توضیح دادم هستشEntities پکیج Entity component system هستش که در قسمت قبل توضیح دادم و شامل هر سه قسمت زیر مجموعه خودش هم هستشHybrid Rendererاین پکیج سیستم رسم و رندر DOTS هست و بدون این پکیج entity ها رندر و در صفحه نمایش داده نمیشنJobs پیکج سیستم C# job system هست که در قسمت قبل دربارش توضیح دادمMathematics برای دستورات ریاضی در DOTS از این پکیج استفاده میشهبعد از نصب تمامی پکیج های بالا میتونیم استفاده از DOTS رو شروع بکنیماولین چیزی که باید در یاد داشته باشیم معماری Entity component system در این سیستم هستش که در مقاله قبلی توضیح دادم و تمامی اجزا طبق اون معماری باید از هم جدا باشنددر قسمت هدر کد ها برای مواقعی که از سیستم DOTS استفاده میکنیم باید از using های مربوط به این سیستم استفاده بکنیماز قسمت ساده تعریف prefab برای spawn شروع میکنیمکد prefabخط بالایی که GenerateAuthoringComponent هستش برای تبدیل کد به mono هستش که در inspector قابل نمایش باشهیادتون باشه که طبق معماری Entity component system کد های تعریف متغییر ها از نوع struct هستند و از IComponentData ارث بری میکنند (اینترفیس تعریف متغییر) و در این بلاک فقط متغییر ها تعریف میشندر داخل بلاک entity با نام prefabb تعریف شده که این ابجکت رو در زمان اجرا instantiate میکنیماین کد رو به یک گیم ابجکت خالی متصل کنید تا ابجکت مورد نظرتون رو بهش assign کنیدبعد از اتصال کد در قسمت add component عبارت convert to entity رو تایپ کنید تا در زمان اجرا این گیم ابجکت از حالت مونو به entity تبدیل بشهکد اول کدی هستش که بالا نوشتیم و پایینی کد تبدیل تبدیل حالت مونو به DOTS و Entity هستشخب حالا که prefab رو داریم کد spawn رو تو یه فایل جدا مینویسیمکد پایینی نیازی نیست که به یه گیم ابجکت متصل باشه و خودکار عملیاتش رو انجام میدهکد spawاین کد برای spawn پریفب ها می باشد که میتونید با تغییر اعداد اون زمان spawn رو تغییر بدیداین کد از نوع class و از ComponentSystem (اینترفیس تعریف کد های عملیات) ارث بری میکنهتابع Oncreate در واقع همان تابع Start در مونو هستش و تابع OnUpdate هم همانند تابع Update مونو عمل میکنهاول تایمری مشخصی میکنیم و در هر Update از اون کم میکنیم و در زمان خودش اجازه فراخوانی کد spawn رو بهش میدیمخط 12 برای new کردن متغییر random هستشخط 21 ام برای پیدا کردن entity هایی هستش که کد entityholder رو بهشون اضافه کردیم در واقع این کد به این اشاره میکنه که به ازای هر Entity که ref (دارای) کد entityholder (کد تعریف prefab) باشه این عملیات رو انجام بده که ما فقط یک Entity با این مشخصات داریم میتونید با Duplicate کردن همون یه گیم ابجکت به جای یه Entity در همون زمان مشخص 2 تا Entity همزمان spawn کنیدبعد از پیدا کردن entity که این کد رو داره در داخل بلاک با استفاده از توابع DOTS اون رو ایجاد میکنیم ( همونطور که میبینید برای Instantiate یک Entity از تابع EntityManager استفاده میکنیم) و در خط بعدی Translation که همان Transform مونو هستش رو در یه محل random در صفحه قرار میدیم (در ورژن فعلی DOTS برای ایجاد تغییر مشخصات بعضی از کامپوننت ها و یه تعداد کد های دیگه از توابع EntityManager استفاده میکنیم)اعداد برای گوشی ها هست ولی باز ممکنه برای بعضی از گوشی ها خارج از محدوده باشه خب تا به جای اینکار entity هارو در محل های متفاوت spawn کردیم و به کمک پکیج Hybrid Renderer نشون داده میشناما در قسمت inspector گیم ابجکتی اضافه نمیشه چون entity ها در یه tab مخصوص نشون داده میشن برای نمایش این tab این مسیر رو باز کنید window -> analysis -> Entity Debugger تو این پنجره تمامی entity ها نمایش داده میشن Entity Debuggerالان بعد اجرا میتونید ببینید به خاطر کد convert to entity به طور خودکار ابجکتی که پریفب رو داخلش قرار دادید تبدیل به entity شده و دیگه تو inspector نیست و در داخل این تب نشون داده میشه من اسم گیم ابجکت رو prefab گذاشتم و همین اسم هم تبدیل شده اگه اسمش رو هم تغییر بدید یا اسم دیگه ای براش انتخاب کرده باشید هم مشکلی ایجاد نمیشهو در ادامه میتونید ابجکت هایی که در حال spawn شدن هستن رو در ببینیدتو نسخه فعلی Entity ها تو پنجره Scene نشون داده نمیشناین قسمت دوم این مجموعه هستش که منتشر میکنم و امیدوارم مفید واقع بشه اگه نکته ای بود که از قلم افتاده یا پیشنهادی دارید میتونید با ارسال کامنت یا با ارسال پیام تو توییتر با من در ارتباط باشید ادرس مطلب در توییتر : توییت