<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های عطا قائم آذر</title>
        <link>https://virgool.io/feed/@ata_g_a</link>
        <description>برنامه نویس</description>
        <language>fa</language>
        <pubDate>2026-06-10 12:58:48</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/237749/avatar/AeaXU4.jpg?height=120&amp;width=120</url>
            <title>عطا قائم آذر</title>
            <link>https://virgool.io/@ata_g_a</link>
        </image>

                    <item>
                <title>اشنایی با برنامه نویسی ادیتور در انجین یونیتی: قسمت دوم</title>
                <link>https://virgool.io/@ata_g_a/%D8%A7%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D8%AF%DB%8C%D8%AA%D9%88%D8%B1-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AC%DB%8C%D9%86-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-eshgjcljetro</link>
                <description>مقدمه: اشنایی با برنامه نویسی ادیتور در انجین یونیتی: مقدمهقسمت اول: اشنایی با برنامه نویسی ادیتور در انجین یونیتی: قسمت اولتوجه:این مقاله برای سطح متوسط به بالا نوشته شده و ممکنه برای افراد مبتدی یونیتی گیج کننده باشه.تو قسمت اول سه گزینه زیر رو بررسی کردیم:نمایش و ویرایش editorنمایش اجزای موجود در کد هانکاتی در نمایش اجزای موجود در کد هاو تو این قسمت گزینه های زیر رو با هم یاد میگیریم:افزودن اجزای جدید برای دسترسی و ویرایش کد هاکار با توابع و راه اندازی ان هانمایش editor windowهمچنین در ادامه توضیحات بیشتری درباره برنامه نویسی ادیتور میدم.مانند قبل برای خوانایی راحت تر متغییر ها از _ استفاده کردم.قبل از شروع به یادگیری اجزای جدید لازمه که کد قبلی که برای نمایش نوشته بودیم رو یکم توسعه بدیم که بتونیم مطالب بیشتری رو با هم یاد بگیریم.افزودن اجزای جدید برای دسترسی و ویرایش کد هانیازی به ویرایش خاصی نیست ولی برای یادگیری بهتر لازمه که یه تعداد متغییر به جدید اضافه بکنیم.با اضافه کردن دو ارایه جدید کار رو ادامه میدیم.مثل قبل تو ادیتور نمایش میدیم.اگه به ادیتور برگردین میبینین که زیر مجموعه ارایه ها رسم نمیشن و ادیتوری شبیه تصویر پایین رو میبینید.راه حل این رسم نشدن خیلی راحته فقط باید یه true به رسم ارایه ها اضافه کنید.این true به معنی این هستش که لازمه زیر مجموعه های این فیلد هم رسم بشن و هر جا فیلدی داشتیم که میخوایم زیر مجموعه های اون رسم بشن لازمه که این گزینه رو اضافه بکنیم.با اضافه شدن این فیلد ارایه به صورت کامل رسم میشه.خب این این ارایه رو برای اموزش های پیش رو اضافه کردم و اموزش رو با اضافه کردن این دو ادامه میدیم.افزودن اجزای جدید برای دسترسی و ویرایش کد هاخود ادیتور امکاناتی برای رسم فیلد هایی برای انجام کار های متنوع و متفاوت میده این فیلد ها میتونن کاربرد های متفاوتی داشته باشن که در ادامه با مثال های خیلی ساده برای اشنایی پیش میریم.قبل از شروع لازمه که دسترسی به مقدار های داخل خود کد داشته باشیم تا بتونیم مستقیم مقادر رو ویرایش بکنیم پس با اضافه کردن کد زیر به دسترسی رو ایجاد میکنیم.نوع متغییر از نوع کد ای هستش که برای اون کد ادیتور مینویسیم و چیزی که داخل پارانتز هستش برای مشخص کردن مقداری هستش که به وسیله = به متغییر داده میشه (تو برنامه نویسی به این حالت cast کردن  گفته میشه)در خط زیر با اضافه کردن یه فیلد int متغییر health رو با اون مقدار دهی میکنیم.میدونم برای مثال اول یکم سخته اما خب لازمه اینم باهم یاد بگیریم و فقط چون متغییر اولیمون private هستش نیاز به این نوع نوشتن داریم و بقیه با دسترسی که با متغییر ie دادیم میتونیم ویرایش رو انجام بدیم. تو خط 48 با استفاده از دسترسی که بالا با استفاده از SerializedProperty health ایجاد کردیم به خود متغییر private دسترسی پیدا میکنیم که intValue رو اینجور در نظر میگیریم که متغییر از نوع int هستش.میرسیم به توضیح نحوه عملکرد کد IntField متد رسم یه فیلد از نوع int هست که ورودی اسم و مقدار رو بهش دادیم دومین ورودی برای مقدار در واقع مقداری هستش که قبل تغییر در اون وجود داره بعد تغییر مقدار با استفاده از = مقدار تغییر داده شده رو به همون متغییر انتقال میدیم.اگه الان به ادیتور برگردید یه فیلد جدید در اخر کد اضافه شده که اگه اون رو تغییر بدید مقدار health در بالا هم تغییر میکنه بدون هیچ کار اضافی این قسمت خودش کاربرد های خودش رو داره.در ادامه یه دکمه و یه متغییر برای جلوگیری از تغییر خودکار و به منظور جلوگیری از اشتباه اضافه میکنیم.نکته ای که اینجا وجود داره اینه که متغییر های توی کلاس ادیتور همه از نوع private هستند که نیازی به نوشتن کلید واژه رو ندارن. (در واقع ننوشتن نوع متغییر قبل از انتخاب type به نشونه private اون متغییر هستش)متغییر رو در این قسمت اضافه میکنیم و کلمه E که جلوی متغییر گذاشتم برای تمایز و نشون دادن اینکه این متغییر ادیتور هستش نوشتم و نیاز نیست شما هم تو همه اسم گذاری ها اینو رعایت بکنید اما لازمه که روشی که باهاش راحت هستید رو انجام بدید که متغییر هارو از هم تشخیص بدید.خب حالا مقدار دهی رو هم تغییر میدیم که مقدار این متغییر رو تغییر بدیم نه متغییر اصلی.الان اگه مقدار فیلد رو تغییر بدید میبینید که مقدار متغییر اصلی تغییر نمیکنه پس شروع میکنیم به نوشتن کد دکمه برای اعمال تغییر به متغییر.کد دکمه رو به این صورت اضافه میکنیم مقدار ورودی اسمی هستش که برای دکمه در نظر گرفتیم و روی دکمه نشون داده میشه اما با کمی دقت متوجه میشید که این قسمت رو داخل یه if قرار دادم که این هم به این دلیل هستش که موقع کلیک روی دکمه بتونیم کلیک رو تشخیص بدیم و کار لازم رو انجام بدیم که در اینجا اعمال کردن مقدار به متغییر اصلی هست.عکس بالا ادیتوری هستش که الان داریم که قسمت ها در هم قرار گرفتن و تشخیص قسمت ها از هم کار سختیه پس با اضافه کردن متن های راهنما این کار رو راحت تر میکنیم.با اضافه کردن خط 50 یه label به ادیتور اضافه میکنیم که قابل ویرایش نیست و فقط در ادیتور برای نوشتن متن استفاده میشه و متن ورودی در ادیتور نمایش داده میشه.خب حالا یکم بهتر شد و قابل تشخیص تر میتونید با استفاده از GUIStyle هم استایل خودتون رو به این فیلد و بقیه فیلد ها اعمال کنید.خب حالا با اضافه کردن یه تیکه دیگه ادامه میدیم که تیکه بعدی از ارایه data_string دیتایی رو به text منتقل میدیم.نکته این قسمت GetArrayElementAtIndex هستش که این تابع باعث میشه تیکه ای که از ارایه رو بهش لازم داریم رو نشون بده و همونطور که میبینید الان با دسترسی ie به متغییر ها دسترسی پیدا میکنیم و اونهارو ویرایش میکنیم.حالا ادیتوری شبیه بالا داریم که با زدن دکمه مقدار به text کپی میشه.اگه ارور هایی در کنسول مشاهده میکنین یا مقداری نمایش داده نمیشه ارایه data_string رو مقداردهی کنید.کار با توابع و راه اندازی ان هاتوابع هم مثل متغییر ها به صورت private هستند و مثل بقیه کد فقط در ادیتور و زمان های مشخص شده کار میکنند و خارج از ادیتور و در خروجی تاثیری ندارند.خود کاربرد توابع فکر نکنم نیازی به توضیح داشته باشه یا نیاز به مثال چون نحوه نوشتن و نحوه پیاده سازی مثل بقیه توابع و با کمک روش های بالا صورت میگیره تنها چیزی که نیاز به توضیح هستش تابع OnSceneGUI هست.این تابع برای ویرایش اجزا و محیط scene میتونه استفاده بشه مثلا با استفاده از این تابع میشه در mesh ابجکت ها تغییراتی انجام داد یا جهت ها یا همون gizmos جدیدی به همون مش اضافه شده اضافه کرد تا بشه مش جدید رو تغییر مکان داد و مواردی از این قبیل که همه اونها در محیط scene اعمال میشن.توضیح برای این تابع خودش زمانبره و یه مقاله جدا لازم برای همین حداقل تو این مقاله دربارش نمینویسم.نمایش editor windowتقریبا میشه گفت تنها تفاوت editor با editor window نحوه نمایش editor window هستش که تو مقدمه بهش پرداختیم پس فعلا فقط یه تیکه کد از نحوه راه اندازی و نمایش editor window رو توضیح میدم.تو مقدمه یه تیکه از همین editor window رو براتون نشون دادم که کد همون تیکه رو با هم بررسی میکنیم.کتابخونه های مورد استفاده که تغییری نداریم فقط باید دقت کنید که اینجا در خط 7 که تعریف کلاس هستش به جای editor از editor window ارث بری میکنیم. (اسم کلاس مهم نیست من فقط اسم رو یکی انتخاب کردم و میتونید تغییرش بدید)خط 9 در واقع محلی هستش که دکمه نشون دادن قراره قرار بگیره که میتونید منو های جدیدی هم ایجاد بکنید چیزی که باید دقت بکنید اینه که اگه بخواید زیر مجموعه های منوی های موجود باشه میتونید از اسم خود منو ها بعد با / گزینه خودتون رو ایجاد بکنید کاری که من با نوشتن Window کردم که باعث میشه این گزینه زیر مجموعه منوی موجود باشه و دکمه Editor Window Example رو به این منو اضافه بکنه.خط 10 خطی هستش که موقع کلیک بر روی دکمه گفته شده اجرا میشه و در واقع پنجره اون منو رو باز میکنه در ورژن های قبل تر از هر پنجره فقط یکی باز میشد و اگه حتی با روش هایی که بود دو تا از اون رو باز میکردید هر دوشون یه جارو نشون میدادن اما تو نسخه های جدید (دقیق یادم نیست این گزینه از 2020 به بعد اضافه شده یا بر روی 2019.4 هم هست) میشه از پنجره inspector چندین گزینه باز کرد که هر کدوم یه قسمتی رو نشون میدن.خط 12 در واقع میاد همین کلاس ای که داریم رو بهش دسترسی پیدا میکنه طبق قانونی که گفتم فقط یه پنجره میتونه نمایش داده بشه.و خط 15 این پنجره رو نمایش میده به این صورت که اگه پنجره قبلا باز باشه روش فوکوس میشه و اگه پنجره ای باز نشده باشه پنجره جدیدی رو با استفاده از کد خط 12 نمایش میده.نتیجه کد بالا همون تیکه قسمتی هستش که در مقدمه عکسش رو قرار دادم و میتونید با استفاده از این کد پنجره ای باز بکنید و کار هایی که لازمه رو با استفاده از چیزایی که تو این دو قسمت گفتم میتونید انجام بدین.توضیحات بیشتر این مجموعه قسمت ها فقط نحوه نوشتن کد ها و نحوه استفاده رو توضیح میدادند که زیر مجموعه VisualElement API هست. اما بعد از این قسمت ها دو گزینه دیگه هم هستش که برای نحوه نمایش و ویرایش چیدمان این گزینه ها به کار میره که ادیتور های تمیز تر و بهتری داشته باشید این دو گزینه UI Document:که نحوه چیدمان المان های ادیتور رو مشخص میکنه.USS:که همون css هستش با کمی تفاوت جزئی که همونطور که در وب برای نحوه استایل دهی استفاده میشه دقیقا در همینجا هم برای همینکار استفاده میشه.اگه وقت باشه در اینده درباره این دو گزینه هم مقاله مینویسم همراه با مثال هایی برای ادیتور. فعلا زمان سربازی من هستش که 1 دی شروع میشه و متاسفانه برای مدتی نمیتونم مقاله جدیدی منتشر بکنم هر چند بین مقاله اول دوم هم فاصله ای افتاد به خاطر همین اما خوشحالم که با همه دردسر هایی که بود تونستم مقاله رو تموم بکنم امیدوارم مشکلی نداشته باشه و مفید باشه.امیدوارم مفید واقع شده باشه اگه نکته ای بود که از قلم افتاده یا پیشنهادی دارید میتونید با ارسال کامنت یا با ارسال پیام تو توییتر با من در ارتباط باشید.</description>
                <category>عطا قائم آذر</category>
                <author>عطا قائم آذر</author>
                <pubDate>Sat, 19 Dec 2020 21:33:58 +0330</pubDate>
            </item>
                    <item>
                <title>اشنایی با برنامه نویسی ادیتور در انجین یونیتی: قسمت اول</title>
                <link>https://virgool.io/@ata_g_a/%D8%A7%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D8%AF%DB%8C%D8%AA%D9%88%D8%B1-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AC%DB%8C%D9%86-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-bkjsbrjwbpsq</link>
                <description>مقدمه: اشنایی با برنامه نویسی ادیتور در انجین یونیتی: مقدمهمقاله کمکی: اموزش attribute های Inspector در انجین یونیتیتوجه:این مقاله برای سطح متوسط به بالا نوشته شده و ممکنه برای افراد مبتدی یونیتی گیج کننده باشه.تو قسمت اول با مقدمات این بخش اشنا شدیم تو این قسمت با برنامه نویسی ادیتور شروع به کدنویسی میکنیم.این قسمت رو به شش بخش متفاوت تقسیم میکنم که خوندن و بررسی قسمت ها راحت تر بشهنمایش و ویرایش editor نمایش اجزای موجود در کد هانکاتی در نمایش اجزای موجود در کد هاافزودن اجزای جدید برای دسترسی و ویرایش کد هاکار با توابع و راه اندازی ان هانمایش editor windowدر این قسمت سه مورد اول رو بررسی و یاد میگیریم تو قسمت دوم سه گزینه بعدی رو با هم مرور میکنیم.به جز قسمت اول بقیه قسمت ها در  editor و editor window یکسان هستند.مانند قبل برای خوانایی راحت تر متغییر ها از _ استفاده کردم.نمایش و ویرایش editor برای اینکه بتونیم مثالی برای این گزینه داشته باشیم لازمه که یک کد اماده از نوع monobehaviour داشته باشیم برای اینکار با یه تکه کد ساده شروع میکنم تا با نکات اولیه اشنا بشیم اگه درخواست ها زیاد شد هم از این بخش و هم بخش هایی که در ادامه هستش مقاله ای جداگانه برای نمونه مثال های ساده منتشر میکنم تا با تکه کد هایی که میتونه کار رو راحت تر بکنه اشنا بشید.برای شروع با کد های ساده شروع میکنیم که زیاد پیچیده نباشه پس با کد پایین شروع میکنیم.کد بالایی رو برای شروع ویرایش میکنیم چیز خاصی نیست اما خب برای شروع بهتره از ساده شروع کنیم تا یادگیری راحت تر باشه :)با استفاده از قوانینی که تو قسمت قبل گفتم یه کد دیگه تو پوشه مخصوص ادیتور ایجاد میکنیم.من معمولا اسم کد های ادیتور رو با اسم خود کد ای که ویرایش میکنه + ادیتور رو انتخاب میکنم اینکار باعث میشه کد رو بهتر و راحت تر پیدا بشه خودتون میتونین با اسمی که باهاش راحتید رو برای اون ها انتخاب بکنیدبعد ایجاد فایل کد و باز کردن اون کتابخونه ادیتور رو فراخوانی میکنیم.بعد از این به جای ارث بری از monobehaviour  ارث بری رو مانند عکس پایین به Editor تغییر میدیم.بعد از اضافه کردن این دو گزینه مشخص میکنیم که میخوایم ظاهر کدوم کد رو در ادیتور ویرایش بکنیم که با اضافه کردن کد زیر به بالای کلاس این کار رو انجام میدیم.اگه اسم دیگه ای برای فایل و کلاس کد خودتون انتخاب کردین این اسم رو به اسم همان کد تغییر بدینبعد از ایجاد این تکه کد ها اماده شدیم که شروع به ویرایش قسمت inspector بکنیم.با اضافه کردن OnInspectorGUI به شروع به ویرایش نحوه نمایش کد در ادیتور میکنیم.بعد از اضافه کردن این کد اگر به ادیتور برگردین میبینین که مانند شکل زیر کد هیچ چیزی رو نمایش نمیده.دو کد پایینی همون ادیتور دیفالتی که قبلا بود رو رسم میکنن بدون تغییر (لازم نیست هر دوی این کد ها رو بنویسین یکیشون کافیه)بهترین گزینه از بین این دو اگر همون ادیتور بدون تغییر رو میخواین همون کد اولی هستش که همون چیزی که تو دیفالت میبینید رو رسم میکنه در بعضی موارد کد دوم همون حالت دیفالت رو رسم نمیکنه و بعضی تغییرات رو در ظاهر میده مانند دسته بندی کردن و اینجور موارد که ممکنه خوشایند نباشه(یکی از این موارد موقع ویرایش کردن نحوه نمایش تو قسمت متریال ها هستش)بعد نوشتن این کد ها میتونید ببینید که حالت دیفالت ادیتور رسم میشه ولی خب ما میخوایم خودمون این اجزا رو رسم بکنیم پس با کامنت کردن این تکه کد شروع میکنیم به رسم اجزا به صورت دستی.نمایش اجزای موجود در کد هاخب شروع میکنیم به رسم اجزا.تو کد بالایی تو خط 14 متغییر health رو پیدا و ذخیره میکنیم و در خط 18 ام اون متغییر رو رسم میکنیم(تو خط 18 مقدار true برای نشون داده شدن تمام اجزای زیر مجموعه متغییر هستش که در این مورد میشه حذفش کرد اما اگر یک ارایه رو بدون این مقدار رسم کنین فقط اسم و علامت مثلث متغیر نمایش داده میشن و مقادیر ارایه نمایش داده نمیشن)بهتره این دو گزینه رو به انتخاب خودتون سازماندهی بکنید که تو پیدا کردنشون به مشکل بر نخورید میتونید مثل من هر دو گزینه رو کنار هم رسم کنید یا دسته بندی خودتون رو انجام بدین.الان اگه برگردین به یونیتی میبینید که ارور هایی تو کنسول چاپ میشن باز هم چیزی نمایش داده نمیشه و اگه ادیتور رو از حالت فوکوس در بیارین و باز رو کلیک کنید میبینید بازم همون ارور ها چاپ میشن.مشکل از اینجاست که متغییر های private قرار نیست در ادیتور نشون داده بشن پس خودکار به حالت Serialize ادیتور در نمیان برای اینکه اینکار رو به روش دستی انجام بدیم کد [SerializeField] رو به بالای متغییر اضافه میکنیم که کد به صورت عکس زیر میشه.خب الان باید متغییر در ادیتور نمایش داده بشه مثل عکس پایین.در نظر داشته باشید متغییر هنوز به حالت private هستش و نمیتونید از کلاس دیگه ای بهش دسترسی داشته باشید.متغییر دوم رو هم مثل متغییر قبلی رسم میکنیم.اگه به یونیتی برگردین میبینین که متغییر دومی هم مثل قبلی رسم شده اما این وسط یه چیزی کم داریم اگه تو اسکریپت ها دقت کرده باشین یه فیلدی هستش که اسم فایل کد رو نشون میده و اگه روش کلیک کنین فایل رو نشون میده و اگه دو بار روش کلیک کنید فایل کد برای ویرایش باز میشه.با دو تیکه کد زیر این قسمت رو هم اضافه میکنیم.خب حالا اگه به یونیتی برگردیم با شکلی شبیه به این مواجه میشید.خب حالا همه اجزای ادیتور رو خودمون نشون دادیم و حتی یه متغییر private رو هم اضافه کردیم.اما همونطور که میبینید شبیه حالت دیفالت فاصله ای بین اجزا نیست حالت attribute های Inspector نیز در این کد ها نیز وجود دارند میتونیم با اضافه کردن این گزینه ها فاصله و توضیحات رو هم اضافه بکنیم.بعد از فاصله گذاری ها ادیتوری که در عکس زیر هست رو میبینید.نکاتی در نمایش اجزای موجود در کد هااگر در ویرایشی که در بالا انجام دادیم سعی کنید گزینه هارو ویرایش بکنید میبینید که گزینه ها باز به حالت قبلی برمیگردند و تغییرات ذخیره نمیشود.برای اینکه تغییرات ذخیره شود باید دو خط کد به ابتدا و انتهای کد ها اضافه بکنیم.خط اول (خط شماره 14) تغییرات رو بررسی و در صورت وجود تغییر مقادیر جدید رو به متغییر ها نسبت میده و خط دوم (خط شماره 34) در صورت وجود تغییر اونارو به متغییر ها اعمال میکنه.خب الان اگه دقت بکنید تغییراتی که در متغییر ها اعمال میکنید به راحتی در متغییر ها اعمال میشن.الان مهم ترین تغییری که میتونیم به این کد بدیم بهینه سازی کد هستش پس شروع میکنیم.با این تغییرات فقط در اولین زمان متغییر هارو پیدا میکنیم و در زمان های بعدی فقط متغییر هارو نمایش و ویرایش میکنیم. با اینکار دیگه ادیتور مجبور نیست هر بار که میخواد گزینه های کد رو اپدیت و ویرایش بکنه تمامی متغییر هارو پیدا بکنه.خب تا به اینجا سه گزینه اولی رو با هم یاد گرفتیم تو قسمت بعدی سه گزینه بعدی رو هم توضیح میدم که شامل گزینه های زیر میشن:افزودن اجزای جدید برای دسترسی و ویرایش کد هاکار با توابع و راه اندازی ان هانمایش editor windowامیدوارم مفید واقع شده باشه اگه نکته ای بود که از قلم افتاده یا پیشنهادی دارید میتونید با ارسال کامنت یا با ارسال پیام تو توییتر با من در ارتباط باشید</description>
                <category>عطا قائم آذر</category>
                <author>عطا قائم آذر</author>
                <pubDate>Thu, 19 Nov 2020 23:28:49 +0330</pubDate>
            </item>
                    <item>
                <title>اشنایی با برنامه نویسی ادیتور در انجین یونیتی: مقدمه</title>
                <link>https://virgool.io/@ata_g_a/%D8%A7%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D8%AF%DB%8C%D8%AA%D9%88%D8%B1-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AC%DB%8C%D9%86-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-%D9%85%D9%82%D8%AF%D9%85%D9%87-daxpvizddgam</link>
                <description>در این مقاله مقدمات برنامه نویسی ادیتور یونیتی رو به صورت ساده توضیح میدم و در قسمت های بعدی شروع به اشنایی و کد نویسی برای ادیتور خواهیم کرد.توجه:این مقاله برای سطح متوسط به بالا نوشته شده و ممکنه برای افراد مبتدی یونیتی گیج کننده باشه.برای برنامه نویسی ادیتور یونیتی فقط یک پکیج در package manager هست که نصب اون پکیج هم کاملا اختیاری هستش که در ادامه مقاله به اون اشاره میکنم برای شروع همه موارد مورد نیاز به صورت پیشفرض نصب هستند و در واقع Editor ای که در یونیتی با اون سر کار داریم اکثرا با استفاده از همین کد ها توسعه داده شده.مانند قبل برای خوانایی راحت تر متغییر ها از _ استفاده کردم.اولین چیزی که برای برنامه نویسی ادیتور باید در نظر داشته باشیم محل قرار گیری کد های این قسمت هستش.تمامی کد هایی که برای ادیتور یونیتی نوشته میشن باید در پوشه ای به نام Editor (به حروف بزرگ و کوچک حساس است) قرار بگیرن تا بر اساس تعاریفی که در انجین شده هنگام خروجی گرفتن کامپایل نشن و باعث بروز خطا و ارور های احتمالی نشن چون این کد ها فقط برای ادیتور یونیتی و برای ویرایش یا اضافه کردن امکانات به ادیتور هستن و موقع خروجی کاربردی ندارند.محل این پوشه حتما لازم نیست زیر مجموعه Assets باشه و میتونید هر کجا که لازم داشته باشید اون رو ایجاد بکنید حتی میتونید چندین پوشه با همین نام و در جاهای مختلف داشته باشید. فقط این رو در نظر داشته باشید اسم پوشه case sensitive یا حساس به حروف بزرگ و کوچک هستش پس اسم پوشه رو به درستی تایپ کنید.هچنین مواظب باشید که بقیه کد هایی که برای مکانیک های بازی نوشتین رو به این پوشه انتقال ندین که باعث سردرگمی و خطا هایی در خروجی بسته به کدی که به این پوشه انتقال دادین میشه.بعد از ساختن این پوشه کد هایی که برای ادیتور یونیتی مینویسیم رو در این پوشه ایجاد میکنیم.کتابخونه ای که برای برنامه نویسی ادیتور نیاز هستش همون طور که در عکس بالا میبینید کتابخونه UnityEditor هست. که در سرخط تمامی کد هایی که برای ادیتور مینویسیم این کتابخونه رو اضافه میکنیم.از اینجا به بعد برنامه نویسی ادیتور به دو قسمت تقسیم میشه که کد های هر دو قسمت تشابه ها و تفاوت هایی دارند. البته اکثرا کد های هر دو قسمت یکی و در اون یکی قسمت قابل استفاده هستن اما مهم ترین بخش تفاوت محل اعمال شدن کد ها هستش.Editorاین نوع برای ویرایش پنجره های موجود مانند inspector هست که با استفاده از ارث بری از این مجموعه میتونیم قسمت های inspector در کد هایی که هستند رو ویرایش و شخصی سازی بکنیم چیزی شبیه به مقاله قبلی attribute های ادیتور با این تفاوت که در این نوع ویرایش کلی امکانات بیشتر برای ادیت وجود دارن.EditorWindowاین نوع شباهت های زیادی به قبلی داره با این تفاوت اصلی که به صورت tab هست و میتونید اون رو جدا از inspector باز و در هر کجا که خواستید قرارش بدین.مثال برای نحوه باز کردن این نوع پنجره ها (البته اینجا میتونیم منوی جدیدی هم ایجاد بکنیم و لازم نیست حتما زیر مجموعه Window باشه)بعد از کلیک بر روی منوی ابی رنگ پنجره ای به شکل زیر باز میشه که قابلیت dock شدن کنار بقیه tab هارو هم داره و مستقل از inspector هست.در مقاله های اینده با برنامه نویسی مبتدی Editor شروع میکنیم و کمی هم از EditorWindow یاد میگیریم.امیدوارم مفید واقع شده باشه اگه نکته ای بود که از قلم افتاده یا پیشنهادی دارید میتونید با ارسال کامنت یا با ارسال پیام تو توییتر با من در ارتباط باشید</description>
                <category>عطا قائم آذر</category>
                <author>عطا قائم آذر</author>
                <pubDate>Sun, 01 Nov 2020 19:36:37 +0330</pubDate>
            </item>
                    <item>
                <title>اموزش attribute های Inspector در انجین یونیتی</title>
                <link>https://virgool.io/coderlife/%D8%A7%D9%85%D9%88%D8%B2%D8%B4-attribute-%D9%87%D8%A7%DB%8C-%D8%A7%D8%AF%DB%8C%D8%AA%D9%88%D8%B1-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AC%DB%8C%D9%86-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-d0ngchyptoie</link>
                <description>یکی از چیز هایی که به عنوان برنامه نویس یونیتی همیشه درگیر اون هستیم Inspector هست، یکپارچه و منظم بودن این قسمت میتونه در عین حال که خوانایی رو بالا میبره باعث افزایش بهره وری هم بشه، تو این مقاله چند تکه کد رو بهتون معرفی میکنم که با نوشتن این کد ها میتونید Inspector منظم تری رو داشته باشید. سمت چپ کد بدون تکه کد ها و سمت راست با تکه کد ها هستشدر این مقاله این کد رو برای بهتر شدن نمایش اون در inspector ویرایش میکنیم که همراه با مثال پیش بریم. کد ای ساده که با ویرایش این کد با مثال پیش میریمبرای جلوگیری از پیچیدگی بیهوده مقاله به جای scriptableobject از monobehaviour استفاده کردم و برای خوانایی راحت تر متغییر ها از _ استفاده کردم.[SerializeField]این تکه کد برای نمایش دادن متغییر های private کد استفاده میشه که به خاطر Encapsulation به صورت public تعریف نشده اند، با استفاده از این تکه کد متغییر به صورت private باقی میمونه اما در Inspector قابل مشاهده و ویرایش هستش.اضافه شده در خط 11[Space] این تکه کد باعث ایجاد فاصله بین دو متغییر ای که بین اون ها این کد نوشته شده میشه، اگه نیاز به فاصله مشخصی یا بیشتر از حالت عادی دارید میتونید این کد رو به صورت [Space(num)] هم استفاده کنید که مقدار num همان مقداری که نیاز دارید فاصله بین دو متغییر باشه هستش.نکته: این کد باید ما بین دو متغییر یا مابین کلاس اصلی و متغییر نوشته بشه در غیر این صورت با ارور مواجه میشین.اضافه شده با عدد در خط های 8 و 11 و 15 و به صورت عادی در خط 18حالا که فاصله رو ایجاد کردیم میتونیم با اضافه کردن متن توضیحاتی رو برای متغییر اضافه کنیم.[Header(&quot;&quot;)]از این تکه کد برای نوشتن متن در Inspector استفاده میشه و مابین متغییر ها نشون داده میشه.نکته: اکثر این تکه کد های دارای ورودی string از کد های رزرو شده \t و \n و بقیه رزرو شده های متن پشتیبانی میکنند و میتونید ازشون استفاده بکنید.اضافه شده در خط 8تا به جای این کار Inspector رو با فاصله دهی و اضافه کردن متن یکم مرتب کردیم.شکل فعلی Inspector[Range(,)]زمانی که نیاز دارید مقدار عددی یک متغییر رو محدود به بازه ای قرار بدین میتونین از این تکه کد استفاده بکنید این تکه کد متغییر ای که در بالای اون نوشته شده رو به محدوده ای که مشخص کردید محدود میکنه و یک نوار تغییر مقدار متغییر هم به اون اضافه میکنه.اضافه شده در خط 13 [TextArea] و [Multiline] هر دوی این تکه کد ها برای تبدیل string به فیلد هایی که دارای چند خط میباشند می باشد با این تفاوت که [TextArea] در خط جدید نمایش داده میشود و دارای طول سطر بیشتری میشود و [MultiLine] در جلوی اسم متغییر نمایش داده میشود و دارای طول سطر کمتری هست، هر دوی این تکه کد ها امکان اضافه کردن متن چند سطری را دارند.اضافه شده در خط  18 و 22 [Tooltip(&quot;&quot;)]حتما شده که روی متنی در یونیتی اشاره گر رو نگه دارید و متن توضیحی برای اون فیلد نمایش داده بشه، با این تکه کد میتونید همون متن توضیحی رو به کد هاتون اضافه کنید تا با نگه داشتن اشاره گر روی اون ها متن توضیحی اون ظاهر بشه.اضافه شده در خط  13 [HideInInspector]بعضی وقت ها لازمه که یک متغییر به صورت public تعریف بشه اما نمیخوایم تو Inspector نمایش داده بشه همونطور که از اسمش پیداست این تکه کد متغییر public  رو در Inspector به صورت hide یا همون مخفی تبدیل میکنه توجه داشته باشید که خود متغییر به صورت public باقی میمونه فقط در Inspector نمایش داده نمیشه.اضافه شده در خط  26 با تغییرات بالا Inspector به شکل زیر خواهد بود.حالا با نگه داشتن موس روی متغییر متن توضیحی روی اون نمایش داده میشه و همون طور که میبینید بقیه متغییر ها هم بر اساس تکه کد هاشون تغییر یافتن[ContextMenu(&quot;&quot;)] این تکه کد گزینه ای به گزینه هایی که موقع راست کلیک یا انتخاب گزینه چرخ دنده روی کد نمایش داده میشن اضافه میکنه و با کلیک روی اون گزینه متد زیر اون اجرا میشه.این متغییر یه حالت دیگه با نام ContextMenuItemAttribute داره که با اون نیاز به قرار دادن تکه کد روی متد نیست.اضافه شده در خط  29 و خط 30 تا 42 هم مربوط به متدی هستش که بعد کلیک روی گزینه مورد نظر اجرا میشن *[InspectorName(&quot;&quot;)]بعضی وقت ها نیازه که اسم متغییر نمایش داده شده تو Inspector و کد متفاوت باشه این مورد بیشتر تو Enum ها میتونه کاربرد داشته باشه که کار رو برای کد نویسی راحت تر بکنه و نیاز به تغییرات در همه جا رو نداشته باشه.با این تغییرات در خط های 46 و 48 به جای اسم اصلی اسمی که در این خط تعیین کرده ایم نشون داده میشن[HelpURL(&quot;&quot;)]حتما تو Inspector علامت کتاب با یه علامت سوال رو چندین بار دیدین با این تکه کد میتونین این دکمه رو به یه url ادرس دهی بکنید که با کلیک روی این علامت url ای که به اون اختصاص دادین تو مرورگر باز میشه.این تکه کد در بالای اسم کلاس نوشته میشه و در خط 5 اضافه میشهکد بالایی کد نهایی هست و با این تغییرات جدید این منو های گفته شده اضافه میشن و کلیک روی دکمه کتاب که با رنگ قرمز مشخص شده ادرس گوگل باز میشود که میتونه هر ادرسی باشه.همونطور که میبینید مقدار به اسمی که مشخص کردیم تغییر یافته و گزینه جدیدی به منو اضافه شده و با کلیک روی علامت کتاب مشخص شده ادرس گوگل در مرورگر باز میشودامیدوارم این مقاله مفید واقع بشه و بتونه باعث خوانایی بهتر Inspector هاتون بشه.لینک توییتر مطلب:  لینک</description>
                <category>عطا قائم آذر</category>
                <author>عطا قائم آذر</author>
                <pubDate>Fri, 25 Sep 2020 19:12:23 +0330</pubDate>
            </item>
                    <item>
                <title>اشنایی با DOTS در یونیتی entity spawn</title>
                <link>https://virgool.io/@ata_g_a/%D8%A7%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-dots-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-entity-spawn-jjc5mbnfovgt</link>
                <description>قسمت اول:     اشنایی با 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 &#40;اینترفیس تعریف کد های عملیات&#41; ارث بری میکنهتابع 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 -&gt; analysis -&gt; Entity Debugger تو این پنجره تمامی entity ها نمایش داده میشن Entity Debuggerالان بعد اجرا میتونید ببینید به خاطر کد convert to entity به طور خودکار ابجکتی که پریفب رو داخلش قرار دادید تبدیل به entity شده و دیگه تو inspector نیست و در داخل این تب نشون داده میشه من اسم گیم ابجکت رو prefab گذاشتم و همین اسم هم تبدیل شده اگه اسمش رو هم تغییر بدید یا اسم دیگه ای براش انتخاب کرده باشید هم مشکلی ایجاد نمیشهو در ادامه میتونید ابجکت هایی که در حال spawn شدن هستن رو در ببینیدتو نسخه فعلی Entity ها تو پنجره Scene نشون داده نمیشناین قسمت دوم این مجموعه هستش که منتشر میکنم و امیدوارم مفید واقع بشه اگه نکته ای بود که از قلم افتاده یا پیشنهادی دارید میتونید با ارسال کامنت یا با ارسال پیام تو توییتر با من در ارتباط باشید ادرس مطلب در توییتر :  توییت</description>
                <category>عطا قائم آذر</category>
                <author>عطا قائم آذر</author>
                <pubDate>Fri, 07 Aug 2020 21:21:12 +0430</pubDate>
            </item>
                    <item>
                <title>اشنایی با DOTS و توضیح علمکرد این تکنولوژی در انجین unity</title>
                <link>https://virgool.io/coderlife/%D8%A7%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-dots-%D9%88-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD-%D8%B9%D9%84%D9%85%DA%A9%D8%B1%D8%AF-%D8%A7%DB%8C%D9%86-%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AC%DB%8C%D9%86-unity-l6l2wgdo9jvb</link>
                <description>در این مقاله سعی کردم تا سیستم DOTS رو به صورت خلاصه و ساده توضیح بدم.توجه:این مقاله برای سطح متوسط به بالا نوشته شده و ممکنه برای افراد مبتدی یونیتی گیج کننده باشه.اول از همه لازمه سخت افزار رو مورد بررسی قرار بدیم در سیستم های امروزی CPU سرعت بسیار بالایی رو داره که میتونه تعداد زیادی از دستورات رو اجرا بکنه مشکل از اونجا شروع میشه که CPU باید به اطلاعات دسترسی پیدا بکنه تا بتونه اونارو اجرا بکنه.این دستورات و اطلاعات به طور دائمی در سخت افزار هایی مثل Hard Disk و SSD که رایج ترین هستند ذخیره میشه از اونجایی که این نوع سخت افزار ها (بسته به نوع و کلاس) سرعت کمی در تبادل اطلاعات دارند برای همین از یک حافظه میانگین برای نگهداری اطلاعات استفاده میشه که به اون RAM گفته میشه RAM سرعت بیشتری در خواندن و نوشتن نسبت به بقیه سخت افزار های ذخیره اطلاعات داره اما بر خلاف بقیه در این سخت افزار با قطع شدن برق اطلاعات پاک میشند. رم (RAM) وظیفه میانجی گر رو در افزایش سرعت خواندن اطلاعات ایفا میکنه ولی بازم در مقابل قدرت و سرعت CPU سرعت زیادی نداره برای همین از یک حافظه میانجی دیگه ای هم برای نگهداری دستورات و اطلاعات استفاده میشه که cache نام داره این نوع حافظه ها بیشترین سرعت رو دارند و در داخل CPU قرار دارند که بسته به نوع CPU سطح بندی و حجم ذخیره سازی متفاوتی دارند مهم ترین دلیل عدم استفاده از نوع حافظه برای کار های دیگر مثل ذخیره سازی قیمت بالای این نوع حافظه ها هست.در کامپیوتر های امروزی با اجرا شدن برنامه اول cache بعد RAM برای موجود بودن اطلاعات بررسی میشوند در صورتی که اطلاعات در هیچکدام از این واحد ها نباشد اطلاعات و دستورات مورد نیاز برنامه در RAM بارگذاری میشوند و دستوراتی که در حال اجرا هستند در حافظه های cache بارگذاری میشوند تا در CPU پردازش شوند.                                       دلایل ایجاد DOTSهمانطور که گفته شد اطلاعات در نهایت در cache ها بارگذاری میشوند تا در CPU اجرا شوند اما تنها دستوری که قرار است اجرا شود در cache ها بارگذاری نمیشود بسته به نوع سیستم عامل و معماری ها اطلاعات و دستورات چند بلاک بعدی هم در cache ها بارگذاری میشود تا در صورت نیاز CPU این دستورات زودتر و بهینه به واحد های پردازش رسیده و عمل پردازش بر روی انها صورت بگیرد.در سیستم فعلی monobehaviour یونیتی اطلاعات به صورت پراکنده در RAM بارگذاری میشوند و در هر بار تغییر CPU در صورت موجود نبودن اطلاعات در cache ها مجبور است تا RAM را برای اطلاعات بررسی بکند تا اطلاعات مورد نیاز خود را پیدا بکند.اما در سیستم DOTS این اطلاعات در کنار هم جایگیری میشوند و با اینکار امکان بارگذاری شدن اطلاعات   مورد نیاز بعدی CPU بالا میرود و در نتیجه سرعت پردازش بالا میرود.حالت مونو (بالا) و داتس (پایین)                                   تکنولوژی DOTS چیست؟کلمه DOTS مخفف کلمات Data Oriented Tab Stack می باشد که شامل زیر شاخه هایی برای استفاده بهینه و حداکثری از سخت افزار برای اجرای بازی ها می شود.البته که سیستم DOTS تنها یک بهینه سازی ساده در RAM نیست و شامل زیر شاخه های زیر می شود:C# job system : وظیفه multithread کردن کد ها را به عهده دارد که با استفاده از API جدید DOTS و این سیستم میتوان بدون درگیر شدن با پیچیدگی های چند هستگی و مشکلات مدیریت ان کد هایی نوشت که بر روی همه هسته های سخت افزار هدف اجرا می شوند در نتیجه میتوان از همه قدرت CPU نهایت استفاده را برد.با این روش میتوان بسته به تعداد هسته های سخت افزار تعداد دستورات اجرایی را چند برابر کرد که باعث افزایش پرفورمنس بازی و تعداد اجزایی که همزمان در حال پردازش هستند شود.Entity component system:این سیستم شامل جایگیری اطلاعات در RAM که در بالا به ان اشاره شد می باشد که خود شامل سه بخش است:        1.Entity:همانند GameObject های معمولی می باشد با این تفاوت که فقط اطلاعات مخصوص خود را نگه میدارد.         2.Components:شامل اطلاعات Entity می باشد با این تفاوت که فقط اطلاعات Entity ها را نگه میدارد و شامل هیچ کد اضافه ای نیست.متغییر ها و داده ها در این قسمت به صورت دسته بندی شده و در فایل های جداگانه نوشته میشوند مانند متغییر های لازم برای یک گونه خاص از دشمن های موجود در بازی.          3.Systems:شامل دستوراتی است که بر روی هر Component تغییراتی ایجاد می کند که این دستورات شامل دستورات	Update و ... می شود.همانند Component ها این کد ها نیز به صورت دسته بندی شده و در فایل های جداگانه نوشته میشوند مانند دستورات لازم برای فعالیت های یک گونه خاص از دشمن های موجود در بازی.Burst compiler: همونطور که از اسمش معلومه یه کامپایلر مخصوص هستش که این کامپایلر برای سیستم هایی که به وسیله monobehaviour نوشته میشن هم کارایی داره این کامپایلر کد های C# نوشته شده در یونیتی رو به کد های اسمبلی و ماشین تبدیل میکنه با یه ویژگی خاص که بسته به دستگاه خروجی (مانند اندروید یا کامپیوتر) بهینگی های مخصوص اون دستگاه رو هم لحاظ میکنه.این مطلب توضیحات مختصری درباره DOTS و نحوه عملکرد اون بود امیدوارم این نوشته تونسته باشه نکته های اولیه این تکنولوژی رو براتون به صورت ساده و فارسی منتقل کنه.قسمت دوم: اشنایی با DOTS در یونیتی entity spawn</description>
                <category>عطا قائم آذر</category>
                <author>عطا قائم آذر</author>
                <pubDate>Sun, 26 Jul 2020 23:32:05 +0430</pubDate>
            </item>
            </channel>
</rss>