Unity Learning
A-Lab_Software_Skyboxes_18_Vol_1@UnityLearning.rar
⭕️ #آموزش استفاده از هر نوع پکیج در #یونیتی
🔹سایت یونیتی پکیج های خود را هم به صورت رایگان و هم به صورت پولی در Asset store خود همیشه با فرمت unitypackage قرار می دهد.
🔸این پکیج ها گاهی شامل آبجکت های بسیار زیادی میشوند، مثلا شامل صدا، کد، آبجکت و...
👌درست ترین و صحیح ترین روش اضافه کردن این پکیج ها به یونیتی استفاده از منوی
Asset-import package-custom package
است که در اینجا مسیر فایل دانلود شده را درخواست میکند و پکیج را بعد از انتخاب در پروژه شما Decompress میکند.
🔜کانال یونیتی لرنینگ بهترین و قابل استفاده ترین پکیج های یونیتی را برایتان قرار خواهد داد.
🔸همچنین روش های دانلود رایگان Assetهای پولی در سایت یونیتی نیز برای شما شرح داده خواهند شد.
〰〰〰〰〰〰
⭕️کانال یونیتی لرنینگ⭕️
💢@UnityLearning💢
🔹سایت یونیتی پکیج های خود را هم به صورت رایگان و هم به صورت پولی در Asset store خود همیشه با فرمت unitypackage قرار می دهد.
🔸این پکیج ها گاهی شامل آبجکت های بسیار زیادی میشوند، مثلا شامل صدا، کد، آبجکت و...
👌درست ترین و صحیح ترین روش اضافه کردن این پکیج ها به یونیتی استفاده از منوی
Asset-import package-custom package
است که در اینجا مسیر فایل دانلود شده را درخواست میکند و پکیج را بعد از انتخاب در پروژه شما Decompress میکند.
🔜کانال یونیتی لرنینگ بهترین و قابل استفاده ترین پکیج های یونیتی را برایتان قرار خواهد داد.
🔸همچنین روش های دانلود رایگان Assetهای پولی در سایت یونیتی نیز برای شما شرح داده خواهند شد.
〰〰〰〰〰〰
⭕️کانال یونیتی لرنینگ⭕️
💢@UnityLearning💢
⭕ #آموزش تنظیم چیدمان #پنجره ها در #یونیتی
👈 در صورتی که می خواهید چیدمان پنجره های یونیتی را از حالت پیش فرض تغییر دهید، از دِرَگ کردن استفاده کنید. «با کلیک و نگهداشتن دکمه ماوس» روی نام پنجره مورد نظر آن را در هر محل مورد نظر تنظیم کنید.
#درخواست
🔸 اگرمی خواهید از قالب های پیش فرض دیگر یونیتی نیز استفاده کنید(توصیه ما) از منوی windows و یکی از گزینه های زیر منوی Layout استفاده کنید.
🔹 اگر هم پنجره ها بهم ریخته و می خواهید آن ها را به شکل اولیه یونیتی مرتب کنید از گزینه Default استفاده کنید.
🔘 در این قسمت (Layout) می توانید چیدمان خود را به عنوان یکی از حالت ها «ذخیره» کنید و در آینده از آن استفاده کنید.
〰〰〰〰〰〰
⭕ کانال یونیتی لرنــــینگ⭕
💢 @UnityLearning💢
👈 در صورتی که می خواهید چیدمان پنجره های یونیتی را از حالت پیش فرض تغییر دهید، از دِرَگ کردن استفاده کنید. «با کلیک و نگهداشتن دکمه ماوس» روی نام پنجره مورد نظر آن را در هر محل مورد نظر تنظیم کنید.
#درخواست
🔸 اگرمی خواهید از قالب های پیش فرض دیگر یونیتی نیز استفاده کنید(توصیه ما) از منوی windows و یکی از گزینه های زیر منوی Layout استفاده کنید.
🔹 اگر هم پنجره ها بهم ریخته و می خواهید آن ها را به شکل اولیه یونیتی مرتب کنید از گزینه Default استفاده کنید.
🔘 در این قسمت (Layout) می توانید چیدمان خود را به عنوان یکی از حالت ها «ذخیره» کنید و در آینده از آن استفاده کنید.
〰〰〰〰〰〰
⭕ کانال یونیتی لرنــــینگ⭕
💢 @UnityLearning💢
⭕ #آموزش ساخت دیوار در #یونیتی برای طراحی محیط بازی
▫ بهترین ابزار و #آبجکت برای ایجاد دیوار در یونیتی آبجکت نام آشنای Cube است، به علت اینکه شبیه ترین شی در بازی به دیوار است و بدیهی است که دیوار ها در بازی ها به شکل مستطیل هستند.
➕ برای اضافه کردن این آبجکت آماده یونیتی بـــه محیط بازی، مانند قبل، از منوی
Game Object - 3D Objects - Cube
استفاده کنید. حال شما یک آبجکت مکعب مستطیل در بازی تان ایجاد کرده اید. تمام قسمت های بازی تان را بسازید(تمام دیوار ها، خانه ها، جدول های کنار خیابان، پیاده روها، دیوار های ظاهری کوچه، راه پله ها و...). برای همه این موارد که در پرانتز ذکر شد و خیلی شی دیگر در دنیای واقعی می توانید از Cube استفاده کنید.
🔗 برای دسته بندی اشیای کنار هم، مثلاً همه اشیای درون یک خانه یا همه اجزای تشکیل دهنده ی یک خیابان(یعنی کف خیابان و جدول ها، تیر برق ها و...) از آبجکت Empty GameObject استفاده کنید.
🔙 همانطور که در پست های قبل بیان شد، یکی از ویژگی ها و کاربرد های Empty Object دسته بندی آبجکت هاست، برای این کار آن را از منوی
Game Object - Create Empty
به محیط تان اضافه کنید، سعی کنید آن را (با توجه به این که هیچ ماهیت ظاهری ندارد) به وسط آبجکت هایی که می خواهید دسته بندی شان کنید، جابجا کنید، حال برای دسته بندی آبجکت هایی که می خواهید در یک دسته قرار گیرند را روی این آبجکت(Empty Game Object) اضافـــه کنید. (این کار خیلی ساده با عمل درگ کردن آبجکت ها روی آبجکت خالی انجام می شود) ، می توانید نام مناسبی برای این آبجکت قرار دهید(این کار نیز با روش های Rename در ویندوز قابل انجام است، یعـــنی روش ها یکی است)
🔘 برای انتخاب #تکسچر مربوط به هر آبجکت (مثلا دیوار) یک تکسچر مناسب(که معمولا با پسوند های png یا jpg هستند) روی آبجکت درگ کنید. همانطور که مشاهده می کنید، ظاهر آبجکت با تکسچری که شما انتخاب کرده بودید، پر می شود.
❗ توجه کنید، گاهی اوقات این اتفاق به نحوی که ما می خواهیم انجام نمی شود، یعنی تصویر آنطور که می خواهیم در محل مناسب خود قرار نمی گیرد، مثلا تصویر اصطلاحاً کش می آید یا نا فرم به نظر می رسد. برای حل این موضوع در کامپوننت اضافه شده به آبجکت مورد نظر (Mesh Renderer و هم نام تکسچر انتخاب شده) در پارامتر Shader گزینه دیگری انتخاب کنید تا بهترین نتیجه را برای کار بگیرید، این پارامتر دقیقا نوع نمایش تصویر روی آبجکت را مشخص می کند. که گزینه های بسیاری برای گرفتن بهترین نتیجه و بنابراین بهتر شدن ظاهر بازی دارد.
▫ یک پک کوچک 4 تایی از تکسچر های دیوار در پست بعدی برای استفاده شما قـــرار خواهد گرفت.
💎 کاربر محترم لطفا کانال یونیتی لرنینگ را به دوستان و آشنایان خود که علاقه به ساخت بازی دارند، معرفی کنید.
〰〰〰〰〰〰
⭕ کانال یونیتی لرنینگ⭕
💢 @UnityLearning💢
▫ بهترین ابزار و #آبجکت برای ایجاد دیوار در یونیتی آبجکت نام آشنای Cube است، به علت اینکه شبیه ترین شی در بازی به دیوار است و بدیهی است که دیوار ها در بازی ها به شکل مستطیل هستند.
➕ برای اضافه کردن این آبجکت آماده یونیتی بـــه محیط بازی، مانند قبل، از منوی
Game Object - 3D Objects - Cube
استفاده کنید. حال شما یک آبجکت مکعب مستطیل در بازی تان ایجاد کرده اید. تمام قسمت های بازی تان را بسازید(تمام دیوار ها، خانه ها، جدول های کنار خیابان، پیاده روها، دیوار های ظاهری کوچه، راه پله ها و...). برای همه این موارد که در پرانتز ذکر شد و خیلی شی دیگر در دنیای واقعی می توانید از Cube استفاده کنید.
🔗 برای دسته بندی اشیای کنار هم، مثلاً همه اشیای درون یک خانه یا همه اجزای تشکیل دهنده ی یک خیابان(یعنی کف خیابان و جدول ها، تیر برق ها و...) از آبجکت Empty GameObject استفاده کنید.
🔙 همانطور که در پست های قبل بیان شد، یکی از ویژگی ها و کاربرد های Empty Object دسته بندی آبجکت هاست، برای این کار آن را از منوی
Game Object - Create Empty
به محیط تان اضافه کنید، سعی کنید آن را (با توجه به این که هیچ ماهیت ظاهری ندارد) به وسط آبجکت هایی که می خواهید دسته بندی شان کنید، جابجا کنید، حال برای دسته بندی آبجکت هایی که می خواهید در یک دسته قرار گیرند را روی این آبجکت(Empty Game Object) اضافـــه کنید. (این کار خیلی ساده با عمل درگ کردن آبجکت ها روی آبجکت خالی انجام می شود) ، می توانید نام مناسبی برای این آبجکت قرار دهید(این کار نیز با روش های Rename در ویندوز قابل انجام است، یعـــنی روش ها یکی است)
🔘 برای انتخاب #تکسچر مربوط به هر آبجکت (مثلا دیوار) یک تکسچر مناسب(که معمولا با پسوند های png یا jpg هستند) روی آبجکت درگ کنید. همانطور که مشاهده می کنید، ظاهر آبجکت با تکسچری که شما انتخاب کرده بودید، پر می شود.
❗ توجه کنید، گاهی اوقات این اتفاق به نحوی که ما می خواهیم انجام نمی شود، یعنی تصویر آنطور که می خواهیم در محل مناسب خود قرار نمی گیرد، مثلا تصویر اصطلاحاً کش می آید یا نا فرم به نظر می رسد. برای حل این موضوع در کامپوننت اضافه شده به آبجکت مورد نظر (Mesh Renderer و هم نام تکسچر انتخاب شده) در پارامتر Shader گزینه دیگری انتخاب کنید تا بهترین نتیجه را برای کار بگیرید، این پارامتر دقیقا نوع نمایش تصویر روی آبجکت را مشخص می کند. که گزینه های بسیاری برای گرفتن بهترین نتیجه و بنابراین بهتر شدن ظاهر بازی دارد.
▫ یک پک کوچک 4 تایی از تکسچر های دیوار در پست بعدی برای استفاده شما قـــرار خواهد گرفت.
💎 کاربر محترم لطفا کانال یونیتی لرنینگ را به دوستان و آشنایان خود که علاقه به ساخت بازی دارند، معرفی کنید.
〰〰〰〰〰〰
⭕ کانال یونیتی لرنینگ⭕
💢 @UnityLearning💢
Wall_Texture_Jpg(@UnityLearning).rar
4.6 MB
⭕ #دانلود پک چهار #تکسچر دیوار با کیفیت عالی و فرمت JPG برای ساخت دیوار در بازی (توضیح کامل در پست قبل)
@UnityLearning
@UnityLearning
⭕ چند نکته در مورد برنامه نویسی
🔗 سعی می کنیم در این پست شما را با چند اصطلاح برنامه نویسی آشنا کنیم.
🔸 ـtransform: ترنسفرم در یونیتی یعنی مجموعه ای از #آبجکت ها، به عبارت دیگر یک یا چند آبجکت در کنار هم transform هستند. به طور مثال یک cube می تواند transform باشد تا یک خانه که مجموعه از آبجکت ها، کامپوننت ها و... است.
🔹ـGame Object: نقطه مقابل transform گیم آبجکت است، که معمولاً آبجکت های تکی یونیتی (معمولا آبجکت هایی مثل دوربین، نور و...) را شامل می شوند و می توان گفت یک game object حتماً یک transform هم هست ولی عکس آن همیشه صحیح نیست(یعنی یک cube هم گیم آبجکت هست و هم transform اما در مقابل یک FPS یک transform است و به هیچ عنوان «با توجه به ماهیتش» یک game object نیست.
🔘 در برنامه نویسی دست برنامه نویس با transform باز تر است (اما نه همیشه) به طور مثال یک transform خاصیت position برای جابجایی دارد، اما game object چنین خاصیتی ندارد.
🔗 نکات برنامه نویسی
◀ اگر بخواهیم یک متغیر (شی) از نوع transform بسازیم، می نویسیم:
var obj:Transform;
یعنی Transform به آبجکت های از نوع transform اشاره می کند. (به حروف کوچک و بزرگ دقت کنید)
◀ اگر بخواهیم همین متغیر از نوع game object باشد به این شکل تعریف می کنیم.
var obj:GameObject;
▫ دسترســـی به آبجکتی که کد به آن متصل شده است:
👈 اگر بخواهیم به transformیی که کد به آن متصل شده است، دسترسی داشته باشیم، باید به این شکل استفاده کنیم.
transform.position
👈 در واقع در #کد_نویسی هر جایی از کلمه کلیدی transform استفاده شود، به این مــــعنی است که «transformیی که کد به آن متصل شده است» را در نظر بگیر.
💢 برای Game Object نیــــز از کلمه کلیدی gameObject (حروف کوچک و بزرگ را دقت کنید) استفاده می شود. مثلاً اگر بگوییم
Destroy(gameObject);
👈 یعـــنی game objectیی که کد به آن متصل شده است را حذف کن.
#اسکریپت_نویسی #یونیتی #جاوا
💫 چهار اصطلاحی که توضیح داده شد، در کلیه زبان های برنامه نویسی قابل پشتیبانی در یونیتی (سی شارپ، جاوا و بو اسکریپت) به همین شکل قابل استفاده است.
👌 به طور خلاصه این چهار اصطلاح را مرور می کنیم و تفاوت های آن ها را بیان می کنیم.
🔸 ـtransform: به ترنسفرمی اشاره می کند که کد به آن متصل شده است.
🔹 ـTransform: نوع داده ترنسفرم، یعنی اگر بخواهیم متغیری تعریف کنیم که از نوع ترنسفرم باشد از این کلمه استفاده می کنیم.
🔸 ـgameObject: به آبجکتی اشاره می کند که کد را به آن متصل کرده ایم. (این دستورات معادل کلمه this در ویژوال استودیو و طراحی فرم ها می باشد)
🔹 ـGameObject: نوع داده گیم آبجکت
〰〰〰〰〰〰〰
⭕ کانال یونیتی لرنینگ⭕
💢 @UnityLearning💢
🔗 سعی می کنیم در این پست شما را با چند اصطلاح برنامه نویسی آشنا کنیم.
🔸 ـtransform: ترنسفرم در یونیتی یعنی مجموعه ای از #آبجکت ها، به عبارت دیگر یک یا چند آبجکت در کنار هم transform هستند. به طور مثال یک cube می تواند transform باشد تا یک خانه که مجموعه از آبجکت ها، کامپوننت ها و... است.
🔹ـGame Object: نقطه مقابل transform گیم آبجکت است، که معمولاً آبجکت های تکی یونیتی (معمولا آبجکت هایی مثل دوربین، نور و...) را شامل می شوند و می توان گفت یک game object حتماً یک transform هم هست ولی عکس آن همیشه صحیح نیست(یعنی یک cube هم گیم آبجکت هست و هم transform اما در مقابل یک FPS یک transform است و به هیچ عنوان «با توجه به ماهیتش» یک game object نیست.
🔘 در برنامه نویسی دست برنامه نویس با transform باز تر است (اما نه همیشه) به طور مثال یک transform خاصیت position برای جابجایی دارد، اما game object چنین خاصیتی ندارد.
🔗 نکات برنامه نویسی
◀ اگر بخواهیم یک متغیر (شی) از نوع transform بسازیم، می نویسیم:
var obj:Transform;
یعنی Transform به آبجکت های از نوع transform اشاره می کند. (به حروف کوچک و بزرگ دقت کنید)
◀ اگر بخواهیم همین متغیر از نوع game object باشد به این شکل تعریف می کنیم.
var obj:GameObject;
▫ دسترســـی به آبجکتی که کد به آن متصل شده است:
👈 اگر بخواهیم به transformیی که کد به آن متصل شده است، دسترسی داشته باشیم، باید به این شکل استفاده کنیم.
transform.position
👈 در واقع در #کد_نویسی هر جایی از کلمه کلیدی transform استفاده شود، به این مــــعنی است که «transformیی که کد به آن متصل شده است» را در نظر بگیر.
💢 برای Game Object نیــــز از کلمه کلیدی gameObject (حروف کوچک و بزرگ را دقت کنید) استفاده می شود. مثلاً اگر بگوییم
Destroy(gameObject);
👈 یعـــنی game objectیی که کد به آن متصل شده است را حذف کن.
#اسکریپت_نویسی #یونیتی #جاوا
💫 چهار اصطلاحی که توضیح داده شد، در کلیه زبان های برنامه نویسی قابل پشتیبانی در یونیتی (سی شارپ، جاوا و بو اسکریپت) به همین شکل قابل استفاده است.
👌 به طور خلاصه این چهار اصطلاح را مرور می کنیم و تفاوت های آن ها را بیان می کنیم.
🔸 ـtransform: به ترنسفرمی اشاره می کند که کد به آن متصل شده است.
🔹 ـTransform: نوع داده ترنسفرم، یعنی اگر بخواهیم متغیری تعریف کنیم که از نوع ترنسفرم باشد از این کلمه استفاده می کنیم.
🔸 ـgameObject: به آبجکتی اشاره می کند که کد را به آن متصل کرده ایم. (این دستورات معادل کلمه this در ویژوال استودیو و طراحی فرم ها می باشد)
🔹 ـGameObject: نوع داده گیم آبجکت
〰〰〰〰〰〰〰
⭕ کانال یونیتی لرنینگ⭕
💢 @UnityLearning💢
⚫️شهادت حضرت امام موسی کاظم علیه السلام را به تمام شیعیان جهان تسلیت عرض میکنیم.
◼️السلام علیک یا اباالحسن یا موسی بن جعفر یا باب الحوائج
▪️@UnityLearning▪️
◼️السلام علیک یا اباالحسن یا موسی بن جعفر یا باب الحوائج
▪️@UnityLearning▪️
⭕توضیحاتی در مورد کامپایلر یونیتی
🔗 اسکریپت های نوشته شده در یونیتی به وسیله خود موتور یونیتی(Engine) کامپایل می شوند(نه به وسیله برنامه جانبی دیگر)
🚫 برخی کاربران نرم افزار Mono Develop را به عنوان کامپایلر یونیتی معرفی می کنند که این مورد 100% اشتبـــاه است و این یک برداشت غلط از این نرم افزار است.
👈 در واقع نرم افزار Mono ، نرم افزاری به جهت اسکریپت نویسی سریع(مخصوصاً به زبان های جاوا و Boo اسکریپت) اســت، یعنی تنهــا کارکرد آن ساده کردن کد نویسی (نمایش دستورات و...) و فراهم آوردن یک محیط باز(که فقط متنی نباشد، مثل Notepad) برای #اسکریپت_نویسی در یونیتی است. به علت این که این نرم افزار (در نسخه های جدید) دستورات بیشتری از یونیتی را می شناسد، کار با آن راحت و از نظــر تعداد استفاده کننده نیز بیشتر شده است.
📌 کامپایلر یونیتی که در سایت یونیتی Platform dependent compilation نامیده می شود، بخشی از ویژگی های همراه با یونیتی است که وظیفه اجرا(Debug) و کامپایل کد های نوشته شده به سه زبان (اسکریپت) به آن چه در یونیتی از آن استفاده می کنیم است.
❌ اگـــر Debuger یونیتی در کد خطایی مشاهده کند آن را در پنجره مربوط نمایش داده و ما نیز می توانیم با دوبار کلیک روی آن خطـــا به اسکریپت مربوطــه منتقل شویم و ایراد (Error) را رفع کنیم.
☑ اگـــر Debuger خطایی پیدا نکند، کامپایلر اسکریپت را برای یونیتی ترجمه می کند و اینجاست که ما می توانیم از کد مورد نظـــر استفاده کنیم(این مطلب با ایجاد تغییر در پنجره Inspector و کامپوننت Script کاملاً مشهود است)
🔸 این مطلب برای آشنایی کاربران عزیز یونیتی با نحوه Compile شدن کد های نوشته در یونیتی در کانال قــرار گرفت.
💢 @UnityLearning💢
🔗 اسکریپت های نوشته شده در یونیتی به وسیله خود موتور یونیتی(Engine) کامپایل می شوند(نه به وسیله برنامه جانبی دیگر)
🚫 برخی کاربران نرم افزار Mono Develop را به عنوان کامپایلر یونیتی معرفی می کنند که این مورد 100% اشتبـــاه است و این یک برداشت غلط از این نرم افزار است.
👈 در واقع نرم افزار Mono ، نرم افزاری به جهت اسکریپت نویسی سریع(مخصوصاً به زبان های جاوا و Boo اسکریپت) اســت، یعنی تنهــا کارکرد آن ساده کردن کد نویسی (نمایش دستورات و...) و فراهم آوردن یک محیط باز(که فقط متنی نباشد، مثل Notepad) برای #اسکریپت_نویسی در یونیتی است. به علت این که این نرم افزار (در نسخه های جدید) دستورات بیشتری از یونیتی را می شناسد، کار با آن راحت و از نظــر تعداد استفاده کننده نیز بیشتر شده است.
📌 کامپایلر یونیتی که در سایت یونیتی Platform dependent compilation نامیده می شود، بخشی از ویژگی های همراه با یونیتی است که وظیفه اجرا(Debug) و کامپایل کد های نوشته شده به سه زبان (اسکریپت) به آن چه در یونیتی از آن استفاده می کنیم است.
❌ اگـــر Debuger یونیتی در کد خطایی مشاهده کند آن را در پنجره مربوط نمایش داده و ما نیز می توانیم با دوبار کلیک روی آن خطـــا به اسکریپت مربوطــه منتقل شویم و ایراد (Error) را رفع کنیم.
☑ اگـــر Debuger خطایی پیدا نکند، کامپایلر اسکریپت را برای یونیتی ترجمه می کند و اینجاست که ما می توانیم از کد مورد نظـــر استفاده کنیم(این مطلب با ایجاد تغییر در پنجره Inspector و کامپوننت Script کاملاً مشهود است)
🔸 این مطلب برای آشنایی کاربران عزیز یونیتی با نحوه Compile شدن کد های نوشته در یونیتی در کانال قــرار گرفت.
💢 @UnityLearning💢
🌸فرا رسیدن بیست و هفتم رجب عید سعید مبعث را به همه مسلمانان جهان تبریک و تهنیت عرض میکنیم.
🌺 @UnityLearning🌺
🌺 @UnityLearning🌺
⭕️دانلود آخرین نسخه درایور کارت گرافیک
👈برای استفاده از حداکثر قدرت کارت گرافیک همواره آخرین نسخه رسمی آن ها را رسم کنید.
🔸آخرین نسخه DirectX نیز به اجرای هر چه بهتر بازی ها کمک خواهد کرد.
🔸در زیر لینک #دانلود آخرین نسخه از #کارت_گرافیک معروف یعنی
AMD Intel Nvidia
برای دانلود قرار گرفته است.
👌در کانال همواره آخرین نسخه رسمی این درایور ها قرار می گیرد، تا استفاده کنندگان از کانال با مشکل مواجه نگردند.
🔘منبع دانلود سایت سافت 98 است.
👈برای استفاده از حداکثر قدرت کارت گرافیک همواره آخرین نسخه رسمی آن ها را رسم کنید.
🔸آخرین نسخه DirectX نیز به اجرای هر چه بهتر بازی ها کمک خواهد کرد.
🔸در زیر لینک #دانلود آخرین نسخه از #کارت_گرافیک معروف یعنی
AMD Intel Nvidia
برای دانلود قرار گرفته است.
👌در کانال همواره آخرین نسخه رسمی این درایور ها قرار می گیرد، تا استفاده کنندگان از کانال با مشکل مواجه نگردند.
🔘منبع دانلود سایت سافت 98 است.
⭕️ دستورات برنامه نویسی
در پست های گذشته توضیحاتی درباره تابع BroadcastMessage داده شد. لینک پستها
https://t.me/UnityLearning/166
https://t.me/UnityLearning/169
https://t.me/UnityLearning/186
https://t.me/UnityLearning/208
https://t.me/UnityLearning/346
https://t.me/UnityLearning/352
👌اکنون کامل تر توضیح می دهیم و سایر دستورات را نیز بیان می کنیم.
📎تابع BroadcastMessage در واقع برای صدا زدن یک تابع دیگر که در اسکریپت دیگری است، استفاده میشود. این اسکریپت می تواند در آبجکت جاری باشد(یعنی مثلا به این آبجکت چند اسکریپت متصل باشد) و هم می تواند در آبجکت دیگری باشد.
1⃣ برای استفاده از حالت اول قالب این تابع به این شکل است.
BroadcastMessage("FunctionName");
2⃣ و در حالت دوم یک آبجکت که دقیقا همان آبجکتی است که می خواهیم کد از آن اجرا شود را به آن می دهیم.
Obj.BroadcastMessage......
که این آبجکت می تواند از هر نوعی باشد و در یونیتی آن را مشخص کنیم.
(➕توضیح بیشتر👈 تمام نوع های یونیتی یعنی
Transform,RigidBody,Collider,....
از تابع BroadcastMessage پشتیبانی میکنند و ما در هر محلی می توانیم آنها را یافته و توابع درون اسکریپت های آن را صدا بزنیم. حتی می توانیم با دستوراتی به یک اسکریپت خاص دسترسی پیدا کنیم، دستورات را در پست های بعدی به بهترین شکل توضیح خواهیم داد و در نهایت یک فیلم آموزشی از تمام آنچه بیان کردیم خواهیم گذاشت)
❓حال اگر این تابـــع (تابعی که می خواهیم در اسکریپت دیگر صدا زده شود) خروجـــی داشته باشد/یا نداشته باشد و یا پارامتر ورودی داشته باشد باید چگونه عمل صدا زدن را انجام دهیم؟
✅اگر تابع خروجی داشت
1⃣در این حالت مقدار خروجی در تابع BroadcastMessage بر می گردد، فقط در این حالت باید حتما برای تابع مشخص کنیم که این تابعی که صدا می زنی، خروجی دارد، به این شکل
BroadcastMessage("function", SendMessageOptions.RequireReceiver);
👈در واقـــع با پارامتر
SendMessageOptions.RequireReceiver
بــه یونیتی می گوییم، این تابع خروجی دارد و باید همینجا منتظر خروجی آن بماند، دقت کنید، اگر تابع خروجی ارسال نکند بازی با خطا مواجــه می شود.
2⃣بنابراین اگر تابع مورد نظـــر ما خروجی نداشت بهتر است به این شکل به یونیتی بگوییم منتظر ارسال پاسخ از اسکریپت آبجکت دیگر نباش
BroadcastMessage("function", SendMessageOptions.DontRequireReceiver);
تا اینجا با دو حالت از تابع آشنا شدیم«یک حالت داشتن خروجی و یک حالت نداشتن خروجی در تابع مقصد»
3⃣حال فرض کنید، تابع مقصد «که قصد صدا زدن آن را داریم» در اسکریپت دیگر دارای پارامـــتر ورودی باشد. در این جا بعد از نام بردن نام تابع مقصد (functionName) پارامـــتر ها را نیز به تابع ارسال می کنیم.
BroadcastMessage("function", parameters .....
به این علت سه نقطه قرار دادیم، چــون بعد از این پارامتر ها می تواند SendMessageOptions با حالت های قبل باشد.
4⃣حالت بدون پارامتر ورودی هم که اولین نوع بود، هیچ موردی در تابع قرار نمی دهیم.
💡به علت طولانی نشدن این مطلب ادامه آن را در پســـت های آتی قرار خواهیم داد.
🎈ادامه مطلب شامل بیان مثال هایی از تابع و بیان سایر توابع مربوط به ارسال Message در #یونیتی است.
#اسکریپت_نویسی #کد_نویسی #برنامه #برنامه_نویسی #جاوا
〰〰〰〰〰〰〰〰
⭕️کــانال یونیــتی لرنـینگ⭕️
💢@UnityLearning💢
در پست های گذشته توضیحاتی درباره تابع BroadcastMessage داده شد. لینک پستها
https://t.me/UnityLearning/166
https://t.me/UnityLearning/169
https://t.me/UnityLearning/186
https://t.me/UnityLearning/208
https://t.me/UnityLearning/346
https://t.me/UnityLearning/352
👌اکنون کامل تر توضیح می دهیم و سایر دستورات را نیز بیان می کنیم.
📎تابع BroadcastMessage در واقع برای صدا زدن یک تابع دیگر که در اسکریپت دیگری است، استفاده میشود. این اسکریپت می تواند در آبجکت جاری باشد(یعنی مثلا به این آبجکت چند اسکریپت متصل باشد) و هم می تواند در آبجکت دیگری باشد.
1⃣ برای استفاده از حالت اول قالب این تابع به این شکل است.
BroadcastMessage("FunctionName");
2⃣ و در حالت دوم یک آبجکت که دقیقا همان آبجکتی است که می خواهیم کد از آن اجرا شود را به آن می دهیم.
Obj.BroadcastMessage......
که این آبجکت می تواند از هر نوعی باشد و در یونیتی آن را مشخص کنیم.
(➕توضیح بیشتر👈 تمام نوع های یونیتی یعنی
Transform,RigidBody,Collider,....
از تابع BroadcastMessage پشتیبانی میکنند و ما در هر محلی می توانیم آنها را یافته و توابع درون اسکریپت های آن را صدا بزنیم. حتی می توانیم با دستوراتی به یک اسکریپت خاص دسترسی پیدا کنیم، دستورات را در پست های بعدی به بهترین شکل توضیح خواهیم داد و در نهایت یک فیلم آموزشی از تمام آنچه بیان کردیم خواهیم گذاشت)
❓حال اگر این تابـــع (تابعی که می خواهیم در اسکریپت دیگر صدا زده شود) خروجـــی داشته باشد/یا نداشته باشد و یا پارامتر ورودی داشته باشد باید چگونه عمل صدا زدن را انجام دهیم؟
✅اگر تابع خروجی داشت
1⃣در این حالت مقدار خروجی در تابع BroadcastMessage بر می گردد، فقط در این حالت باید حتما برای تابع مشخص کنیم که این تابعی که صدا می زنی، خروجی دارد، به این شکل
BroadcastMessage("function", SendMessageOptions.RequireReceiver);
👈در واقـــع با پارامتر
SendMessageOptions.RequireReceiver
بــه یونیتی می گوییم، این تابع خروجی دارد و باید همینجا منتظر خروجی آن بماند، دقت کنید، اگر تابع خروجی ارسال نکند بازی با خطا مواجــه می شود.
2⃣بنابراین اگر تابع مورد نظـــر ما خروجی نداشت بهتر است به این شکل به یونیتی بگوییم منتظر ارسال پاسخ از اسکریپت آبجکت دیگر نباش
BroadcastMessage("function", SendMessageOptions.DontRequireReceiver);
تا اینجا با دو حالت از تابع آشنا شدیم«یک حالت داشتن خروجی و یک حالت نداشتن خروجی در تابع مقصد»
3⃣حال فرض کنید، تابع مقصد «که قصد صدا زدن آن را داریم» در اسکریپت دیگر دارای پارامـــتر ورودی باشد. در این جا بعد از نام بردن نام تابع مقصد (functionName) پارامـــتر ها را نیز به تابع ارسال می کنیم.
BroadcastMessage("function", parameters .....
به این علت سه نقطه قرار دادیم، چــون بعد از این پارامتر ها می تواند SendMessageOptions با حالت های قبل باشد.
4⃣حالت بدون پارامتر ورودی هم که اولین نوع بود، هیچ موردی در تابع قرار نمی دهیم.
💡به علت طولانی نشدن این مطلب ادامه آن را در پســـت های آتی قرار خواهیم داد.
🎈ادامه مطلب شامل بیان مثال هایی از تابع و بیان سایر توابع مربوط به ارسال Message در #یونیتی است.
#اسکریپت_نویسی #کد_نویسی #برنامه #برنامه_نویسی #جاوا
〰〰〰〰〰〰〰〰
⭕️کــانال یونیــتی لرنـینگ⭕️
💢@UnityLearning💢
⭕ #ادامه مطلب مربوط به دستورات #برنامه_نویسی
💢 در ادامـــه آموزش های مربوط به پست قبل با لینک👇
https://t.me/UnityLearning/405
🔹 به طور #مثال اگــر تابعی در اسکریپت دیگری که به FPS متصل کرده ایم به شکل زیر تعریف شده باشد/👇
function Add(int a,int b){....}
و ما در اینجا بخــواهیم این تابع را در یک اسکریپت دیگر که به FPS نیز متصل نشده اســت، صدا بزنیم/👇
var FPS:Transform;
.....
.....
(در محل مورد نظر)
FPS.BroadcastMessage("Add",10,20,SendMessageOptions.DontRequierReceiver);
و در #یونیتی مقدار متغیر FPS در اسکریپت را برابر FirstPersonCharchter قــرار می دهیم. «در اینجا ما اعداد 10 و 20 را به عنوان پارامتـر ورودی به تابع Add ارسال خواهیم کرد.
🔸 اگـــر اسکریپت جاری ما(که از آن قصد صدا زدن یک تابع در اسکریپت دیگری را داریم) و اسکرپیت دیگر مربوط به یک #آبجکت بودند/ مثلاً هر دو اسکریپت به FPS داده شده بود و می خواستیم کدی از اسکریپت دیگر صدا بزنیم/👇
BroadcastMessage("Add",10,20,SendMessageOptions.DontRequierReceiver);
👈 یعــــنی در اینجا نیازی به تعریف و مقدار دهی متغیر اضافی برای آبجکت دیگر نیست«چون هـر دو متغـــیر به یک آبجکت متصل شده اند و نیازی به این کار نیست»
💎 این دستور دقیقا معادل این است که به این شکل بنویسیم/👇
transform.BroadcastMessage(...);
👈 که واژه transform مشخص است «به آبجکتی که کــد به آن متصل شده است، اشاره خواهد کرد»
⭕ ادامه دستورات ارسال Message در یونیتی به منظور صدا زدن سایر توابع در اسکریپت های دیگر
💮 تابع BroadcastMessage پارامــتر که شما به دنبال آن هستید «یعنی همان تابع اسکریپت های دیگر» را در تمام آبجکت ها و اسکریپت های متصل به آبجکت گفته شده جستجو می کند و در صورتی که به پاسخ برسد آن را اجرا می کند.
♦ اما گاهی بازی ساز نیاز ندارد تمام آبجکت های زیر مجموعه یک آبجکت را برای اجرا کد جستجو کند/ در واقع بازی ساز می خواهد این جستجو فقط در یک سری آبجکت انجام شود(مثلا تمام آبجکت های زیر مجموعه یک transform) در این جا یونیتی توابع دیگــری مثل SendMessageUpward و SendMessage دارد که در پست های آتی در مورد آن توضیح کامل داده می شود/ نحوه نوشتن این توابع دقیقاً مشابه هم است، تفاوت در عملکرد آن هاست.
💢خـــلاصـــــه💢
☑ عملکرد تابع BroadcastMessage را یک بار دیگر بیان می کنیم/
🔗 متن انگلیسی از سایت یونیتی
call the passed in function for all the scripts on the game object that have that function and for all children objects that also have that function.
🔗 متن فارسی «اجرای کامل همه توابع در اسکریپت های متصل به گیم آبجکت مورد نظر و تمام بچه های متصل به آن (گیم آبجکت های زیر مجموعه در پنجره Hierarchy)»
〰〰〰〰〰〰〰
⭕ کانال یونیتی لرنینگ⭕
💢 @UnityLearning💢
💢 در ادامـــه آموزش های مربوط به پست قبل با لینک👇
https://t.me/UnityLearning/405
🔹 به طور #مثال اگــر تابعی در اسکریپت دیگری که به FPS متصل کرده ایم به شکل زیر تعریف شده باشد/👇
function Add(int a,int b){....}
و ما در اینجا بخــواهیم این تابع را در یک اسکریپت دیگر که به FPS نیز متصل نشده اســت، صدا بزنیم/👇
var FPS:Transform;
.....
.....
(در محل مورد نظر)
FPS.BroadcastMessage("Add",10,20,SendMessageOptions.DontRequierReceiver);
و در #یونیتی مقدار متغیر FPS در اسکریپت را برابر FirstPersonCharchter قــرار می دهیم. «در اینجا ما اعداد 10 و 20 را به عنوان پارامتـر ورودی به تابع Add ارسال خواهیم کرد.
🔸 اگـــر اسکریپت جاری ما(که از آن قصد صدا زدن یک تابع در اسکریپت دیگری را داریم) و اسکرپیت دیگر مربوط به یک #آبجکت بودند/ مثلاً هر دو اسکریپت به FPS داده شده بود و می خواستیم کدی از اسکریپت دیگر صدا بزنیم/👇
BroadcastMessage("Add",10,20,SendMessageOptions.DontRequierReceiver);
👈 یعــــنی در اینجا نیازی به تعریف و مقدار دهی متغیر اضافی برای آبجکت دیگر نیست«چون هـر دو متغـــیر به یک آبجکت متصل شده اند و نیازی به این کار نیست»
💎 این دستور دقیقا معادل این است که به این شکل بنویسیم/👇
transform.BroadcastMessage(...);
👈 که واژه transform مشخص است «به آبجکتی که کــد به آن متصل شده است، اشاره خواهد کرد»
⭕ ادامه دستورات ارسال Message در یونیتی به منظور صدا زدن سایر توابع در اسکریپت های دیگر
💮 تابع BroadcastMessage پارامــتر که شما به دنبال آن هستید «یعنی همان تابع اسکریپت های دیگر» را در تمام آبجکت ها و اسکریپت های متصل به آبجکت گفته شده جستجو می کند و در صورتی که به پاسخ برسد آن را اجرا می کند.
♦ اما گاهی بازی ساز نیاز ندارد تمام آبجکت های زیر مجموعه یک آبجکت را برای اجرا کد جستجو کند/ در واقع بازی ساز می خواهد این جستجو فقط در یک سری آبجکت انجام شود(مثلا تمام آبجکت های زیر مجموعه یک transform) در این جا یونیتی توابع دیگــری مثل SendMessageUpward و SendMessage دارد که در پست های آتی در مورد آن توضیح کامل داده می شود/ نحوه نوشتن این توابع دقیقاً مشابه هم است، تفاوت در عملکرد آن هاست.
💢خـــلاصـــــه💢
☑ عملکرد تابع BroadcastMessage را یک بار دیگر بیان می کنیم/
🔗 متن انگلیسی از سایت یونیتی
call the passed in function for all the scripts on the game object that have that function and for all children objects that also have that function.
🔗 متن فارسی «اجرای کامل همه توابع در اسکریپت های متصل به گیم آبجکت مورد نظر و تمام بچه های متصل به آن (گیم آبجکت های زیر مجموعه در پنجره Hierarchy)»
〰〰〰〰〰〰〰
⭕ کانال یونیتی لرنینگ⭕
💢 @UnityLearning💢
🌘حلول ماه شعبان و فرا رسیدن اعیاد شعبانیه را به همه مسلمانان جهان تبریک و تهنیت عرض میکنیم.
🌸🌼🌹🌺🌹🌼🌸
🌜 @UnityLearning 🌛
🌸🌼🌹🌺🌹🌼🌸
🌜 @UnityLearning 🌛
🔸کاربران عزیزی که به ساخت برنامه اندروید علاقه مند هستند می توانند در کانال آموزش ساخت برنامه اندروید عضو شوند.
🔹البته این کانال هنوز نوپاست و کار زیادی دارد تا به یک کانال خوب تبدیل شود.
🆔آی دی کانال جهت مشاهده👇
@AndroidStudioLearning
https://telegram.me/AndroidStudioLearning
🔹البته این کانال هنوز نوپاست و کار زیادی دارد تا به یک کانال خوب تبدیل شود.
🆔آی دی کانال جهت مشاهده👇
@AndroidStudioLearning
https://telegram.me/AndroidStudioLearning
⭕️کد تقلب (cheat) چیست؟
👈تقلب در بازی ها، یکی از روش های بازی کردن است که در آن در داستان اصلی بازی تقلب صورت میگیرد. این به این معنی است که کاری میکنیم در انجام بازی در برابر دشمنان به موفقیت میرسیم. (البته با تقلب)
ـ«cheat ها توسط بازی ساز ساخته میشود»
💢بازی ساز خودش بازی میسازد، که آن را به وسیله تقلب نیز، میشود انجام داد و تفاوت اصلی آن با ترینر ها این است که ترینر ها به وسیله برنامه نویسان ِ هکر انجام میشود، یعنی بازی ساز به این شکل بازی را نساخته که با تقلب بشود آن را انجام داد امّا هکر ها برنامه ای ساخته اند که در کدهای اصلی بازی تغییر ایجاد میشود.
❓اما چگونه بازی بسازیم که دارای cheat باشد؟
🔘پاسخ کاملا ساده است، کاری که انجام میدهیم این است که ابتدا یک استراتژی برای وارد کردن کد در بازی مان انتخاب میکنیم. یعنی کدها باید دقیقا به چه صورت وارد شود(منو، کنسول، در جریان بازی) سپس اسکریپتی بنویسیم که مدیریت آن را بر عهده داشته باشد. سپس در تمام اسکریپت هایی که می دانیم در اجرای cheat تأثیر دارد، توابعی تعریف کنیم که هنگام اجرای کد (که در بازی نوشته شده است) اجرا شود.
☑️به طور #مثال یک تابع باشد که همیشه جان بازیکن را 100% نگهدارد. یعنی در تابع Update همیشه آن را برابر صد قرار دهیم.
(به این کد تقلب اصطلاحا Godmode گفته میشود که در تقلب ها مهمترین کد هست)
〰〰〰〰〰〰〰
⭕️کانال یونیتی لرنینگ⭕️
💢@UnityLearning💢
👈تقلب در بازی ها، یکی از روش های بازی کردن است که در آن در داستان اصلی بازی تقلب صورت میگیرد. این به این معنی است که کاری میکنیم در انجام بازی در برابر دشمنان به موفقیت میرسیم. (البته با تقلب)
ـ«cheat ها توسط بازی ساز ساخته میشود»
💢بازی ساز خودش بازی میسازد، که آن را به وسیله تقلب نیز، میشود انجام داد و تفاوت اصلی آن با ترینر ها این است که ترینر ها به وسیله برنامه نویسان ِ هکر انجام میشود، یعنی بازی ساز به این شکل بازی را نساخته که با تقلب بشود آن را انجام داد امّا هکر ها برنامه ای ساخته اند که در کدهای اصلی بازی تغییر ایجاد میشود.
❓اما چگونه بازی بسازیم که دارای cheat باشد؟
🔘پاسخ کاملا ساده است، کاری که انجام میدهیم این است که ابتدا یک استراتژی برای وارد کردن کد در بازی مان انتخاب میکنیم. یعنی کدها باید دقیقا به چه صورت وارد شود(منو، کنسول، در جریان بازی) سپس اسکریپتی بنویسیم که مدیریت آن را بر عهده داشته باشد. سپس در تمام اسکریپت هایی که می دانیم در اجرای cheat تأثیر دارد، توابعی تعریف کنیم که هنگام اجرای کد (که در بازی نوشته شده است) اجرا شود.
☑️به طور #مثال یک تابع باشد که همیشه جان بازیکن را 100% نگهدارد. یعنی در تابع Update همیشه آن را برابر صد قرار دهیم.
(به این کد تقلب اصطلاحا Godmode گفته میشود که در تقلب ها مهمترین کد هست)
〰〰〰〰〰〰〰
⭕️کانال یونیتی لرنینگ⭕️
💢@UnityLearning💢
⭕ #آموزش #تابع OnTrigger
🔗 در یونیتی برای اینکه یک عمل در هنگام ورود یک شی به یک محدوده اتفاق بیافتد دو تابع OnTriggerEnter و OnTriggerExit قـــرار داده شده است، در این پست کلیه مطالب مربوط به این دو تابع را آموزش خواهیم داد.
☑ این تابع دقیقا زمانی که یک شی که دارای کامپوننت Collider است اجرا می شود، به عبارت دیگر «این تابع برای شی که اسکریپت را به آن متصل کردیم و محدوده ای (با استفاده از کامپوننت Collider و البته با تیــک Trigger) به عنوان Trigger برایش تعیین شده، زمانی اجرا خواهد شد، که یک شی خارجی که دارای کامپوننت Collider است وارد این محدوده شود»
🔸 از این تابع در پست های گذشته بسیار استفاده کردیم، به طور #مثال زمانی که می خواستیم یک شی در هنگام ورود بازیکن به محدوده Trigger آن حذف یا Destroy شــود، از تابع OnTriggerEnter استفاده کردیم/👇
function OnTriggerEnter()
{
Destroy(gameObject,1);
}
این تکه کد به هر شی که برایش محدوده Trigger تعریف کرده باشید، داده شود/👈 باعث می شود با ورود هر شی دیگر(بازیکن، دشمن و حتی تیر ها و...) که داراری #کامپوننت Collider باشد، این #آبجکت حذف شود.
مشخص است که این چیزی نیست که برنامه نویسِ بازی می خواهد، او مثلا می خواهد این کد زمانی اجرا شود که شی وارد شده یک شی خاص باشد. یونیتی برای این مسئله یک شکل دیگر از تابع OnTriggerEnter را ارائه کرده است/👇
function OnTriggerEnter(P:Collider)
زمانی که تابع را به شکل (یعنی با پارامتر ورودی تعریف کنید) شیی که وارد محدوده Trigger شده است و نوع آن هم Collider است در متغیر P قرار خواهد گرفت. حال برنامه نویس می تواند این متغیر را با آنچه مد نظرش است چک کند و اگر صحیح بود عمل خاص انجام شود.
«تابع OnTriiger از توابعی در #یونیتی است که به صورت چند ریختی (یعنی با چند شکل مختلف) تعریف شده است و اگر با پارامتر ورودی تعریف شود، شی مورد نظر که به محدوده وارد شده است در آن پارامتر قرار می گیرد »
◀ روش های مختلف بررسی به این شکل است/👇
if(P==FPS)
👈 و این در این حالت است که FPS را در ابتدای اسکریپت خود به این شکل تعریف کرده باشد/👇
var FPS:Collider;
حال اگر به هر دلیلی FPS از نوع Transform تعریف شده بود و بخواهیم آن را با Collider بررسی کنیم، نیاز است از دستورات /👇
GetComponent(Collider);
برای آن استفاده کنیم و آن را با P تست کنیم.
◀ اما یکی از بهترین این روش ها استفاده از تگ هاست که قبلا نیز در مورد آن ها صحبت کردیم/👇
https://t.me/UnityLearning/214
♦ اگر برای اشیا مورد نظر خود تگ تعریف کرده باشید به راحتی آن را به این شکل بررسی می کنیم/👇
if(p.tag="Player")
💎 تابع OnTriggerExit نیز به همین شکل زمانی اجــرا می شود که شی مورد نظـــر ما از محدوده Trigger «خارج شود»
〰〰〰〰〰〰〰
⭕ کانال یونیتی لرنینگ⭕
💢 @UnityLearning💢
🔗 در یونیتی برای اینکه یک عمل در هنگام ورود یک شی به یک محدوده اتفاق بیافتد دو تابع OnTriggerEnter و OnTriggerExit قـــرار داده شده است، در این پست کلیه مطالب مربوط به این دو تابع را آموزش خواهیم داد.
☑ این تابع دقیقا زمانی که یک شی که دارای کامپوننت Collider است اجرا می شود، به عبارت دیگر «این تابع برای شی که اسکریپت را به آن متصل کردیم و محدوده ای (با استفاده از کامپوننت Collider و البته با تیــک Trigger) به عنوان Trigger برایش تعیین شده، زمانی اجرا خواهد شد، که یک شی خارجی که دارای کامپوننت Collider است وارد این محدوده شود»
🔸 از این تابع در پست های گذشته بسیار استفاده کردیم، به طور #مثال زمانی که می خواستیم یک شی در هنگام ورود بازیکن به محدوده Trigger آن حذف یا Destroy شــود، از تابع OnTriggerEnter استفاده کردیم/👇
function OnTriggerEnter()
{
Destroy(gameObject,1);
}
این تکه کد به هر شی که برایش محدوده Trigger تعریف کرده باشید، داده شود/👈 باعث می شود با ورود هر شی دیگر(بازیکن، دشمن و حتی تیر ها و...) که داراری #کامپوننت Collider باشد، این #آبجکت حذف شود.
مشخص است که این چیزی نیست که برنامه نویسِ بازی می خواهد، او مثلا می خواهد این کد زمانی اجرا شود که شی وارد شده یک شی خاص باشد. یونیتی برای این مسئله یک شکل دیگر از تابع OnTriggerEnter را ارائه کرده است/👇
function OnTriggerEnter(P:Collider)
زمانی که تابع را به شکل (یعنی با پارامتر ورودی تعریف کنید) شیی که وارد محدوده Trigger شده است و نوع آن هم Collider است در متغیر P قرار خواهد گرفت. حال برنامه نویس می تواند این متغیر را با آنچه مد نظرش است چک کند و اگر صحیح بود عمل خاص انجام شود.
«تابع OnTriiger از توابعی در #یونیتی است که به صورت چند ریختی (یعنی با چند شکل مختلف) تعریف شده است و اگر با پارامتر ورودی تعریف شود، شی مورد نظر که به محدوده وارد شده است در آن پارامتر قرار می گیرد »
◀ روش های مختلف بررسی به این شکل است/👇
if(P==FPS)
👈 و این در این حالت است که FPS را در ابتدای اسکریپت خود به این شکل تعریف کرده باشد/👇
var FPS:Collider;
حال اگر به هر دلیلی FPS از نوع Transform تعریف شده بود و بخواهیم آن را با Collider بررسی کنیم، نیاز است از دستورات /👇
GetComponent(Collider);
برای آن استفاده کنیم و آن را با P تست کنیم.
◀ اما یکی از بهترین این روش ها استفاده از تگ هاست که قبلا نیز در مورد آن ها صحبت کردیم/👇
https://t.me/UnityLearning/214
♦ اگر برای اشیا مورد نظر خود تگ تعریف کرده باشید به راحتی آن را به این شکل بررسی می کنیم/👇
if(p.tag="Player")
💎 تابع OnTriggerExit نیز به همین شکل زمانی اجــرا می شود که شی مورد نظـــر ما از محدوده Trigger «خارج شود»
〰〰〰〰〰〰〰
⭕ کانال یونیتی لرنینگ⭕
💢 @UnityLearning💢
✨💫میلاد با سعادت امام حسین، حضرت عباس و امام زین العابدین علیهم السلام را به تمام مسلمانان جهان تبریک و تهنیت عرض میکنیم.
💫✨التماس دعا✨💫
💢 @UnityLearning💢
💫✨التماس دعا✨💫
💢 @UnityLearning💢
⭕️مطالب بیشتر در ادامه مباحث #کلاس Time
🔹در پست زیر(225) در مورد متوقف کردن بازی با دستور timeScale توضیحاتی دادیم و در چند پست مطالب بیشتری در این مورد و متوقف کردن بازی در زمان خاص (مثلا زمان زدن کلید Esc و باز شدن منوی بازی) خواهیم گفت.
🔗لینک پست قبلی/👇
https://t.me/UnityLearning/225
🔸ابتدا دستور را مجدد بررسی میکنیم/👇
Time.timeScale=0;
👈که استفاده از این دستور باعث توقف بازی میشود، اما کدام توابع متوقف میشوند.
Update,LateUpdate...
👈توابع اصلی که متوقف خواهند شد توابع آپدیت هستند و در مقابل تابعی که در این زمان متوقف نخواهد شد تابع OnGUI است.
📍محل هایی در بازی هست که نمی توان آن را استفاده کرد(دستور توقف) یعنی نمی توان با این دستور بازی را متوقف کرد(منظور توابع آماده یونیتی است) در این چند پست کلیه این موارد را بررسی میکنیم.
⭕️تابع OnGUI چیست؟
🔰این تابع عملکردی مشابه تابع آپدیت دارد اما تفاوت آن این است که این تابع برای رابط گرافیکی کاربر(مثل منوی بازی) مورد استفاده قرار می گیرد.
🔜در ادامه و پست(های) بعدی در نظر داریم کلیه دستورات و توابعی که برای زمان بازی و ساخت منو در بازی لازم است، را به طور کامل توضیح دهیم و یاد بگیریم از توابع GUI استفاده کنیم.
#اسکریپت_نویسی #کد_نویسی #جاوا #یونیتی #زمان #کلاس
💢برای دسترسی به همه مطالب مرتبط با این موضوع از هشتگ های بیان شده به خصوص #زمان استفاده کنید.
〰〰〰〰〰〰〰
⭕️کانال یونیتی لرنینگ⭕️
💢@UnityLearning💢
🔹در پست زیر(225) در مورد متوقف کردن بازی با دستور timeScale توضیحاتی دادیم و در چند پست مطالب بیشتری در این مورد و متوقف کردن بازی در زمان خاص (مثلا زمان زدن کلید Esc و باز شدن منوی بازی) خواهیم گفت.
🔗لینک پست قبلی/👇
https://t.me/UnityLearning/225
🔸ابتدا دستور را مجدد بررسی میکنیم/👇
Time.timeScale=0;
👈که استفاده از این دستور باعث توقف بازی میشود، اما کدام توابع متوقف میشوند.
Update,LateUpdate...
👈توابع اصلی که متوقف خواهند شد توابع آپدیت هستند و در مقابل تابعی که در این زمان متوقف نخواهد شد تابع OnGUI است.
📍محل هایی در بازی هست که نمی توان آن را استفاده کرد(دستور توقف) یعنی نمی توان با این دستور بازی را متوقف کرد(منظور توابع آماده یونیتی است) در این چند پست کلیه این موارد را بررسی میکنیم.
⭕️تابع OnGUI چیست؟
🔰این تابع عملکردی مشابه تابع آپدیت دارد اما تفاوت آن این است که این تابع برای رابط گرافیکی کاربر(مثل منوی بازی) مورد استفاده قرار می گیرد.
🔜در ادامه و پست(های) بعدی در نظر داریم کلیه دستورات و توابعی که برای زمان بازی و ساخت منو در بازی لازم است، را به طور کامل توضیح دهیم و یاد بگیریم از توابع GUI استفاده کنیم.
#اسکریپت_نویسی #کد_نویسی #جاوا #یونیتی #زمان #کلاس
💢برای دسترسی به همه مطالب مرتبط با این موضوع از هشتگ های بیان شده به خصوص #زمان استفاده کنید.
〰〰〰〰〰〰〰
⭕️کانال یونیتی لرنینگ⭕️
💢@UnityLearning💢
⭕ در ادامه پست قبلی مربوط بـه #کلاس Time #زمان بازی
https://t.me/UnityLearning/412
❌ در ابتدای شروع بازی نمی توان بازی را متوقف کرد(تابع Start) یعنی در تابع Start نمی توان از دستور TimeScale=0 استفاده کرد.
☑ علت این موضوع این است که در هنگام شروع بازی (دقیقا لحظه استارت) باید همه آبجکت ها ابتدا در موقعیت هایی که شما تعیین کردید قرار گیرند و بعد #کامپوننت های همه #آبجکت ها به آن ها متصل شود. درست است که این دو کار در یک چشم به همزدن انــجام می شود و بازیساز و بازیکن متوجه این مسئله نمی شوند اما لازم است یونیتی این مقدار دهی ها و تعیین موقعیت ها برای هر آبجکت را انجام دهد، تا بازی برای اولین بار اجرا شود. با متوقف کردن بازی با این دستور در این زمان، دقیقا باعث می شوید این اتفاق نیافتد و در نتیجه به یک باره شاهد بهم ریختن صفحه بازی (به طور مثال سقوط اجسام دارای Rigidbody) باشید.
🔅 اما در شرایطی لازم است این اتفاق بیافتد، یعنی لازم است بازی در ابتدای شروع متوقف باشد و در هنگام رخ دادن یک اتفاق (مثلا کلیک شدن روی یک منو) بازی شروع شود، قبل پاسخ کمی توضیح دهیم/👇
▫ یکی از مهمترین روش ها برای ایجاد یک منوی ابتدایی برای بازی طراحی محیط منوی اولیه بازی در یک Scene و یا حتی نرم افزار دیگر است، یعنی منوی بازی از اصل بازی ما متفاوت باشد، شما این موضوع را همیشه در اکثر بازی ها مشاهده می کنید که منوی اولیه بازی ها از خود بازی ها جدا هستند، شما می توانید با بررسی این که در هنگام اجرا مرحله ای از بازی اصلی رزولیشن صفحه تغییر می کند، کاملا واضح است که این دو جدا هستند. این موضوع که برایتان بیان کردیم اصلی ترین دلیل برای این کار(جدا کردن منوی اولیه بازی از خود بازی) در بازی های بزرگ است. «این روش بسیار عالی و حرفه ای را در یونیتی لرنینگ به پست های آینده موکول می کنیم🔜 »
♦ اما مطلب اصلی ما «توقف بازی اصلی در هنگام شروع بازی»
❓ برای توقف بازی در تابع Start باید چکار کنیم؟
✅ پاســـخ این موضوع و آموزش این مسئله در سایت یونیتی قرار گرفته است، شما برای این کار نیاز به ایجاد یک تاخیر زمانی (در حد چند صدم ثانیه) در بازی تان هستید/👇
yield WaitForSeconds(0.001);
👈 این عمل را در تابع Start انجام دهید و در خط بعد بگویید timeScale=0 شود، تا بازی در ابتدای کار متوقف باشد و آنچه شما برای کار خود نیاز دارید در ابتدا اجرا گردد.
🔸 در این حالت بیان کردیم(در پست قبلی) که تنها تابع OnGUI اجرا می شود و سایر دستورات و توابع از کار خواهند ایستاد، پس شما آن چه نیاز دارید (مثلا کنترل شدن یک کلید، اگر کلید Esc فشار داده شد باید بازی شروع شود، یا یک منو طراحی کرده اید که اگر بازیکن روی Start New Game کلیک کرد) بازی آغاز شود.
❗🔚 نکته نهایی، بهتر است آبجکتی مثل FPS که با ماوس حرکت می کند، در هنگام توقف بازی(Pause) غیر فعال شود. این دو خط این کار را انجام می دهد. خط اول آبجکت را(هر آبجکتی را) به همراه کلیه زیر مجموعه هایش به طور کامل غیر فعال می کند. خط دوم تنها همین آبجکت را(نه کامپوننت ها و آبجکت های دیگر متصل شده به آن را) غیر فعال می کند.
FPS.gameObject.SetActiveRecursively(false);
FPS.gameObject.active = false;
🔗 در مـــورد این دو دستور بیشتر توضیح خواهیم داد، اما در همین حد که تابع اولی SetActiveRecursively اگر با پارامتر false باشد کلیه کامپوننت ها و آبجکت های متصل به یک آبجکت دیگر را غیر فعال می کند و در این جا (توقف در ابتدای بازی) ما نیاز داریم کامپوننت هایی مثل Contoller و Audio حتما قطع باشند.
🔸 این مطالب ادامه دارد.
〰〰〰〰〰〰〰
⭕ کانال یونیتی لرنینگ⭕
💢 @UnityLearning💢
https://t.me/UnityLearning/412
❌ در ابتدای شروع بازی نمی توان بازی را متوقف کرد(تابع Start) یعنی در تابع Start نمی توان از دستور TimeScale=0 استفاده کرد.
☑ علت این موضوع این است که در هنگام شروع بازی (دقیقا لحظه استارت) باید همه آبجکت ها ابتدا در موقعیت هایی که شما تعیین کردید قرار گیرند و بعد #کامپوننت های همه #آبجکت ها به آن ها متصل شود. درست است که این دو کار در یک چشم به همزدن انــجام می شود و بازیساز و بازیکن متوجه این مسئله نمی شوند اما لازم است یونیتی این مقدار دهی ها و تعیین موقعیت ها برای هر آبجکت را انجام دهد، تا بازی برای اولین بار اجرا شود. با متوقف کردن بازی با این دستور در این زمان، دقیقا باعث می شوید این اتفاق نیافتد و در نتیجه به یک باره شاهد بهم ریختن صفحه بازی (به طور مثال سقوط اجسام دارای Rigidbody) باشید.
🔅 اما در شرایطی لازم است این اتفاق بیافتد، یعنی لازم است بازی در ابتدای شروع متوقف باشد و در هنگام رخ دادن یک اتفاق (مثلا کلیک شدن روی یک منو) بازی شروع شود، قبل پاسخ کمی توضیح دهیم/👇
▫ یکی از مهمترین روش ها برای ایجاد یک منوی ابتدایی برای بازی طراحی محیط منوی اولیه بازی در یک Scene و یا حتی نرم افزار دیگر است، یعنی منوی بازی از اصل بازی ما متفاوت باشد، شما این موضوع را همیشه در اکثر بازی ها مشاهده می کنید که منوی اولیه بازی ها از خود بازی ها جدا هستند، شما می توانید با بررسی این که در هنگام اجرا مرحله ای از بازی اصلی رزولیشن صفحه تغییر می کند، کاملا واضح است که این دو جدا هستند. این موضوع که برایتان بیان کردیم اصلی ترین دلیل برای این کار(جدا کردن منوی اولیه بازی از خود بازی) در بازی های بزرگ است. «این روش بسیار عالی و حرفه ای را در یونیتی لرنینگ به پست های آینده موکول می کنیم🔜 »
♦ اما مطلب اصلی ما «توقف بازی اصلی در هنگام شروع بازی»
❓ برای توقف بازی در تابع Start باید چکار کنیم؟
✅ پاســـخ این موضوع و آموزش این مسئله در سایت یونیتی قرار گرفته است، شما برای این کار نیاز به ایجاد یک تاخیر زمانی (در حد چند صدم ثانیه) در بازی تان هستید/👇
yield WaitForSeconds(0.001);
👈 این عمل را در تابع Start انجام دهید و در خط بعد بگویید timeScale=0 شود، تا بازی در ابتدای کار متوقف باشد و آنچه شما برای کار خود نیاز دارید در ابتدا اجرا گردد.
🔸 در این حالت بیان کردیم(در پست قبلی) که تنها تابع OnGUI اجرا می شود و سایر دستورات و توابع از کار خواهند ایستاد، پس شما آن چه نیاز دارید (مثلا کنترل شدن یک کلید، اگر کلید Esc فشار داده شد باید بازی شروع شود، یا یک منو طراحی کرده اید که اگر بازیکن روی Start New Game کلیک کرد) بازی آغاز شود.
❗🔚 نکته نهایی، بهتر است آبجکتی مثل FPS که با ماوس حرکت می کند، در هنگام توقف بازی(Pause) غیر فعال شود. این دو خط این کار را انجام می دهد. خط اول آبجکت را(هر آبجکتی را) به همراه کلیه زیر مجموعه هایش به طور کامل غیر فعال می کند. خط دوم تنها همین آبجکت را(نه کامپوننت ها و آبجکت های دیگر متصل شده به آن را) غیر فعال می کند.
FPS.gameObject.SetActiveRecursively(false);
FPS.gameObject.active = false;
🔗 در مـــورد این دو دستور بیشتر توضیح خواهیم داد، اما در همین حد که تابع اولی SetActiveRecursively اگر با پارامتر false باشد کلیه کامپوننت ها و آبجکت های متصل به یک آبجکت دیگر را غیر فعال می کند و در این جا (توقف در ابتدای بازی) ما نیاز داریم کامپوننت هایی مثل Contoller و Audio حتما قطع باشند.
🔸 این مطالب ادامه دارد.
〰〰〰〰〰〰〰
⭕ کانال یونیتی لرنینگ⭕
💢 @UnityLearning💢
⭕ اشکال مختلف دستور For در #جاوا اسکریپت
#درخواست
◀ در جاوا دستورات از انعطاف پذیری بیشتری برخوردار هستند(نسبت به سی شارپ) و یکی از دلایل اصلی انتخاب جاوا اسکریپت برای کد نویسی در محیط های دیگر مثل بازی ها یا محیط وب همین انعطاف پذیری بالای دستورات است.
🔄 دستورِ حلقه for که برای تکرار استفاده می شود نیــز از این قضیه مستثنی نیست. دستور for اشکال مختلفی در جاوا دارد تا برنامه نویسان بتوانند به راحتی از آن استفاده کنند، شکل کلی این دستور به این شکل است/👇
for (statement 1; statement 2; statement 3) {
code block to be executed
}
که در آن Statement ها به ترتیب «دستوری که قبل از شروع حلقه باید اجرا شود، شرط تکرار حلقه و دستوری که باید در هر بار تکرار حلقه تکرار شود است» وجود دستور شرط (Statement2) برای حلقه در این حالت اجباری است.
⭕ حالت دیگری از حلقه for
☑ آنچه در نظر داشتیم در این پست بیان کنیم، این شکل از حلقه for در جاوا اسکریپت است و آن پیمایش حلقه(تکرار) در یک متغیر آرایه ای است. یعنی به منظور پیمایش اعضای یک متغیـــر آرایه ای استفاده می شود. (معادل دستور foreach در سی شارپ) قالب for در این حالت به این شکل است/👇
for (var Name in Array) {
code block to be executed
}
🔸 فرض کنید x یک متغیر عددی باشد و a یک آرایه عددی در این صورت اگر می خواهیم دستور if به تعداد اعضای آرایه a تکرار شود و اعضا را از شماره صفر تا N(آخرین عضو آرایه) در متغیر x قرار دهد که بتوانیم از آن در محاسباتِ بدنه تابع استفاده کنیم، به این شکل می نویسیم/👇
#مثال
for (x in a) {
//Loop Block
}
ـ(x در بدنه این تابع معادل a[i] خواهد بود/ البته اگر به شکل قبل استفاده می کردیم)
🔗 از این دستور for برای محاسبه #آبجکت های بازی استفاده های بسیاری می کنیم. همه آبجکت های پیرامون یک آبجکت خاص را بدست می آوریم و ...
#برنامه_نویسی #کدنویسی #جاوا #اسکریپت_نویسی #یونیتی
〰〰〰〰〰〰〰
⭕ کانال یونـــیتی لرنینگ⭕
💢 @UnityLearning💢
#درخواست
◀ در جاوا دستورات از انعطاف پذیری بیشتری برخوردار هستند(نسبت به سی شارپ) و یکی از دلایل اصلی انتخاب جاوا اسکریپت برای کد نویسی در محیط های دیگر مثل بازی ها یا محیط وب همین انعطاف پذیری بالای دستورات است.
🔄 دستورِ حلقه for که برای تکرار استفاده می شود نیــز از این قضیه مستثنی نیست. دستور for اشکال مختلفی در جاوا دارد تا برنامه نویسان بتوانند به راحتی از آن استفاده کنند، شکل کلی این دستور به این شکل است/👇
for (statement 1; statement 2; statement 3) {
code block to be executed
}
که در آن Statement ها به ترتیب «دستوری که قبل از شروع حلقه باید اجرا شود، شرط تکرار حلقه و دستوری که باید در هر بار تکرار حلقه تکرار شود است» وجود دستور شرط (Statement2) برای حلقه در این حالت اجباری است.
⭕ حالت دیگری از حلقه for
☑ آنچه در نظر داشتیم در این پست بیان کنیم، این شکل از حلقه for در جاوا اسکریپت است و آن پیمایش حلقه(تکرار) در یک متغیر آرایه ای است. یعنی به منظور پیمایش اعضای یک متغیـــر آرایه ای استفاده می شود. (معادل دستور foreach در سی شارپ) قالب for در این حالت به این شکل است/👇
for (var Name in Array) {
code block to be executed
}
🔸 فرض کنید x یک متغیر عددی باشد و a یک آرایه عددی در این صورت اگر می خواهیم دستور if به تعداد اعضای آرایه a تکرار شود و اعضا را از شماره صفر تا N(آخرین عضو آرایه) در متغیر x قرار دهد که بتوانیم از آن در محاسباتِ بدنه تابع استفاده کنیم، به این شکل می نویسیم/👇
#مثال
for (x in a) {
//Loop Block
}
ـ(x در بدنه این تابع معادل a[i] خواهد بود/ البته اگر به شکل قبل استفاده می کردیم)
🔗 از این دستور for برای محاسبه #آبجکت های بازی استفاده های بسیاری می کنیم. همه آبجکت های پیرامون یک آبجکت خاص را بدست می آوریم و ...
#برنامه_نویسی #کدنویسی #جاوا #اسکریپت_نویسی #یونیتی
〰〰〰〰〰〰〰
⭕ کانال یونـــیتی لرنینگ⭕
💢 @UnityLearning💢