Unity Learning
2.99K subscribers
574 photos
211 videos
1.05K files
280 links
⭕️کانال آموزش حرفـــه ای موتور بازی سازی یـــونیتی

▪️ @UnityLearning ▫️

🔹ارتباط با مدیر کانال/👇

@UnityLearning_Admin

🔹 کد شامد /👇

1-1-3526-61-3-1

💰 تعرفه تبلیغات/👇

@UnityLearning_Ads

لینک گروه تبادل نظر اعضای کانال
@UnityLearning_Group
Download Telegram
⭕️همه چیز در مورد #پنجره Game در #یونیتی

🔹این پنجره برای نمایش آنچه در خروجی بازی نمایش داده می شود، استفاده می شود.

@UnityLearning
⭕️تفاوت توابع OnTrigger و OnCollision

( #آموزش توابع OnCollision برای بررسی برخورد در یونیتی)

▫️این پست به #درخواست کاربران قرار می‌گیرد.

🔙 همانطور که قبلا بیان کردیم در یونیتی #کامپوننت Collider به دو منظور بکار می‌رود.

🔘اول) ساخت یک مانع برای آبجکت ها (یعنی محلی که باعث می‌شود آبجکت ها از هم رد نشوند)

🔘دوم) تعیین محدوده برای اجرای تابع OnTrigger... (اگر هر آبجکتی وارد این محدوده شود کل کدهای تابع OnTriggerEnter اجرا می‌شود و...)

🔹توابع OnCollision زمانی اجرا می‌شوند که دو کالیدر به هم برخورد کنند. حال باعث می‌شود این سؤال پیش آید که تفاوت این دو تابع در چیست؟

پاسخ کاملا واضح است، زمانی که دو جسم دارای کالیدر بهم برخورد می‌کنند به هیچ وجه از هم رد نمیشود یعنی دو کالیدر مماس هم می‌شوند و وارد محدوده هم نمی شوند. که توابع به ترتیب زیر اجرا می‌شوند:

1⃣ در ابتدای شروع لمس و فقط یک بار تابع OnCollisionEnter اجرا می‌شود. (از آن قبلا برای تشخیص برخورد تیر استفاده کرده ایم، برای مشاهده نحوه استفاده به اسکریپت های مربوطه مراجعه کنید)

2⃣ در زمان لمس تابع OnCollisionSlay دایما اجرا می‌شود(نحوه اجرای این تابع مانند تابع Update است فقط تا زمانی اجرا می‌شود که دو آبجکت یک دیگر را لمس کرده اند و در زمان پایان لمس اجرای تابع نیز متوقف می‌شود)

3⃣ در پایان لمس و هنگام جدا شدن فقط یک بار دستورات تابع OnCollisionExit استفاده می‌شود.

⬅️ این توابع همگی یک پارامتر ورودی دارند که #کامپوننت ِ کالیدری است که به آبجکت جاری برخورد کرده است. از روی آن می‌توان دقیقا محل برخورد و لمس دو آبجکت را از بدست آورد.

🔸#جاوا /👇
function OnCollisionEnter(P: Collider )
{.....

🔸#سی_شارپ /👇
void OnCollisionEnter(Collider p)
{....

◀️ در اینجا P همان کامپوننت کالیدری است که آبجکت جاری(که کد را به آن متصل کرده ایم) را لمس کرده است.

💡یادآوری: برای بدست آوردن آبجکت یک کالیدر (آبجکتی که این کالیدر به آن متصل شده است یا اصطلاحا پدر این کالیدر) از دستور زیر استفاده می‌شود.

Collider.transform;

به طور مثال برای p /👇
p.transform

👈آبجکتی است که کالیدر به آن متصل است (یعنی همان آبجکت دیگری که شی جاری به وسیله آن لمس شده است)

#اسکریپت_نویسی #کد_نویسی #یونیتی #برنامه_نویسی

▪️همین شرایط اجرا برای توابع OnTrigger موجود است. با این تفاوت که توابع OnTrigger در زمان ورودی یک کالیدر به محدوده Trigger اجرا می‌شود.



⭕️کانال یونیتی لرنینگ⭕️
💢@UnityLearning💢
⭕️ بررسی آبجکت ورودی توابع OnCollision و OnTrigger

👈در پست قبل مطالبی در مورد توابع مذکور بیان کردیم و گفتیم این توابع یک پارامتر ورودی از نوع Collider دارند که همان #کامپوننت کالیدریست که وارد محدوده شده و یا آبجکت را لمس کرده.

حال سؤال اینجاست چگونه می توانیم بررسی کنیم این آبجکت چیست و اگر آبجکت مورد نظر ما بود یک عمل را انجام دهیم .

▫️برای این کار سه روش کلی وجود دارد:

🔹روش اول) بررسی مستقیم آبجکت. در این روش آبجکت مورد نظر دقیقا با آبجکت دیگر تست شده و اگر یکی هستند شرط برقرار می‌شود.

🔸اگر آبجکتی به عنوان ورودی ِ اسکریپت از نوع Transform تعریف شود /👇

var testObj:Transform;

▪️می‌توان آن را با آبجکت در تابع مقایسه کرد.

▫️یعنی اگر p کالیدر ورودی است با شرط زیر این کار قابل انجام است/👇

if(p.transform == testObj) {....

👈فقط کافی است آبجکت مورد نظر را در یونیتی به عنوان پارامتر ورودی به اسکریپت بدهید.

🔹 روش دوم) بررسی از روی تگ ها، برای بررسی تگ یک آبجکت که کالیدر به آن متصل است از دستور زیر استفاده کنید(فرض کنید p کالیدر ورودی است) /👇

If(p.gameObject.tags== "TagName") {....

🔹روش سوم) بررسی از روی نام آبجکت، برای بررسی نام آبجکت نیز از شرط زیر استفاده می‌شود /👇

P.gameObject.name == "Name"

⬅️ در این روش آبجکت از روی نامش بررسی می‌شود.

🔰 تمام این دستورات برای بررسی اینکه چه آبجکتی وارد محدوده شده (در OnTrigger) و یا چه آبجکتی لمس کرده (در OnCollision) نوشته می‌شود و سه روش جداگانه پر کاربرد برای اینکار بیان می‌شود که هر کدام کاربرد خاص خود را دارند.

❇️ در یک بازی فقط یک کاراکتر وجود دارد و قرار است تست شود ، بهترین راه استفاده از روش نام است چون تنها یک آبجکت هست و نام آن را می‌دهیم.

یا در برخی بازی ها میخواهیم یک گروه آبجکت را تست کنیم مثلا همه دشمن ها اگر وارد این محدوده شوند باید یک اتفاق بیافتد در اینجا بهترین روش استفاده از تگ هست. (ضمنا تمامی شرط های بیان شده باید در توابع OnTrigger و یا OnCollision با پارامتر ورودی p انجام بشود برای اطلاعات بیشتر پست قبل در مطالعه کنید)



⭕️کانال یونیتی لرنینگ⭕️
💢@UnityLearning💢
This media is not supported in your browser
VIEW IN TELEGRAM
⭕️ ساخت یک کالیدر خالی با حذف یا غیر فعال کردن Mesh Renderer

👈به منظور ایجاد یک آبجکت که ماهیت ظاهری نداشته باشد ولی کالیدر آن عمل کند.

@UnityLearning
با انتخاب سه دکمه
CtrlShiftA
بعد از انتخاب آبجکت در Hierarchy #پنجره کوچکی در Inspector باز می‌شود تا به کمک آن بتوانید #کامپوننت مورد نظر خود را جستجو و به آبجکت اضافه کنید.

@UnityLearning
Unity Learning
با انتخاب سه دکمه CtrlShiftA بعد از انتخاب آبجکت در Hierarchy #پنجره کوچکی در Inspector باز می‌شود تا به کمک آن بتوانید #کامپوننت مورد نظر خود را جستجو و به آبجکت اضافه کنید. @UnityLearning
👆 #پنجره کوچکی که بعد از زدن سه دکمه CtrlShiftA برای اضافه کردن Components باز می‌شود.

🔹می‌توانید در این پنجره نام #کامپوننت مورد نظر را وارد و با انتخاب آن، کامپوننت به آبجکت اضافه می‌شود.
⭕️ #دانلود #آبجکت بسیار با کیفیت Iron Man
🔹شخصیت اصلی کارتون و سری بازی های Iron Man

📍سورپرایز ویژه کانال

🔸دانلود در پست بعدی

@UnityLearning
jzb865er6v_IronMan.rar
10.1 MB
⭕️ #دانلود #رایگان #آبجکت Iron Man

👈کاملا Rig شده و آماده برای استفاده در بازی (قابلیت جداسازی بخشهای مختلف برای شبیه سازی اعمال)

🔹فرمت obj

@UnityLearning
🏎 #دانلود #آبجکت بسیار با کیفیت ماشین
Bugatti Chiron 2017 sports

🔹ساخته شده با بلندر با قابلیت تغییر و کیفیت فوق العاده

@UnityLearning
6e48z1kc7r40_bugatti.zip
74.2 MB
⭕️ #دانلود #آبجکت ماشین با کیفیت عالی

🔸ساخته شده با بلندر

📍فرمت های در دسترس blend و obj

@UnityLearning
با کلیک راست روی آیتم مورد نظر در #پنجره Project و سپس انتخاب گزینه Show in Explorer پنجره Explorer ویندوز/مک که فایل مورد نظر در آن قرار دارد باز می شود.

@UnityLearning
اضافه کردن یک آبجکت به عنوان بچه (Child) به یک #آبجکت دیگر به صورت خودکار و با یک کلیک

@UnityLearning
⭕️ #اطلاعیه

🔸برخی دوستان که به کانال بپوستند می‌خواهند از ابتدا شروع کنند و درخواست معرفی منبع دارند.

🔹کانال یونیتی لرنینگ حدود یک سال و نیم است که آموزش یونیتی را از صفر آغاز کرده است(درست است که آموزش های اولیه به اندازه پست های حال با کیفیت نیستند اما قابل مطالعه و فهم هستند)

@UnityLearning

🔘این دسته از افراد می‌توانند با کلیک روی دکمه پایین این پست به اولین پست آموزشی کانال که در 26 اردیبهشت 1395 منتشر شده است، دسترسی داشته باشند.
گرفتن اسکرین شات از صفحه بازی در یونیتی

📷 برای گرفتن اسکریپن شات در فرمت png از صفحه جاری بازی دستوری از #کلاس Application ارائه شده است، با کمک این دستور شما می توانید یک عکس با کیفیت تعیین شده از صفحه بازی خود داشته باشید. /👇

Application.CaptureScreenshot("Screenshot.png");

👈 دستور بالا عکس Screenshot.png را در مسیر جاری بازی (کنار فایل exe بازی در ویندوز و طبق شرایط تعریف شده در سیستم عامل های موبایل (اندروید و iOS) در مسیر persistentDataPath قرار می دهد. اگر فایل به همین نام در این مسیر وجود داشته باشد یونیتی آنرا جایگزین می کند.

🔸 این دستور می تواند به عنوان متدِ یک تابع(function) نوشته شود و سپس به عنوان پارامتر به متد های OnClick یک Button داده شود تا در صورتی که کاربر نهایی بازی روی این دکمه کلیک کرد یک اسکرین شات از صفحه جاری بازیش داشته باشد.

🔹 همچنین می توان زمانی این دستور را فراخوانی کرد که یک کلید از صفحه کلید فشرده شده باشد مثلا زمانی که بازیکن کلید F4 را زد یک اسکرین شات از بازی گرفته و ذخیره شود.
/👇

if(Input.GetKeyDown(KeyCode.F4))
{
Application.CaptureScreenshot("Screenshot.png");
}


#اسکریپت_نویسی #جاوا #سی_شارپ #یونیتی #گرفتن_اسکرین_شات_از_صفحه

#درخواست

کانال یونیتی لرنینگ
💢 @UnityLearning💢
🌷 #پکیج بسیار با کیفیت و با تنوع گل و گیاه برای استفاده در یونیتی به عنوان Grass- Details

👈 دانلود در پست بعدی کانال

@UnityLearning
Grass And Flowers Pack 1.unitypackage
72.1 MB
⭕️ #پکیج گل و گیاه برای استفاده به عنوان Grass روی Terrain در یونیتی

🌷مجموعه #تکسچر های دو بعدی برای گل و گیاه

@UnityLearning
حالات مختلف آب در یونیتی

💦 بازتاب شدن تصویر در آب+نمایش آنچه زیر آب است(حالت شیشه ای)

@UnityLearning
🌹میلاد با سعادت حضرت امام هادی علیه السلام بر عاشقان طریقت اهل بیت مبارک باد.

🌷السلام علیک یا علی بن محمد ایها الهادی النقی

@UnityLearning
باز کردن یک فایل (به عنوان یک Object) در یونیتی

قبلاً آمـــوزش کامل باز کردن و ذخیره کردن یک فایل متنی در یونیتی را بیان کردیم. این فایل یک فایل متنی طبعاً با خروجی String بــود و کار با آن نسبتاً ساده بود.

در این آمـــوزش در نظر داریم، باز کردن یک فایل (مثل یک عکس، ویدیو و...) در یونیتی از یک مسیـــر در حافظه رسانه (مثلا مموری یا هارد در موبایل یا سیستم) را بیان کنیم.

برای باز کردن یک فایل از سیستم در یونیتی از دستور Resources.Load استفاده می شود. در واقع #کلاس Resources برای دسترسی به منابـــع جانبی سیسنم استفاده می شود که سایر دستورات آنرا نیز در کانال بیان خواهیم کرد در اینجا قصد داریم دستور Load را بیان کنیم.

🔸 خروجی دستور Resources.Load از نوع Object اســـت که باید در برنامه نویسی تبدیل شود. این تبدیل در جاوا با کلمه as انجام می شود. البته یکی از روش های این تبدیل برای #سی_شارپ نیز as است ولی روش های دیگر و کاربردی تری برای تبدیل وجود دارد.

🔹 پارامتر ورودی دستور Resources.Load مسیر و نام فایل مورد نظر است و اگر مسیر داده نشود منظور «مسیر جاری بازی» است و خروجـــی آن یک Object است که می تواند در بخش های مختلف در کد نویسی استفاده کرد. مثلا اگر یک عکس دو بعدی باز کردیم (مثلا از نوع png) می توانیم با چنین دستور به Texture آن دسترسی داشت.
Object.Texture;

🔹 بـــا فرض این که یک فایل Glass.png در کنار فایل اصلی بازی موجود باشد دستورات زیر این فایل را به عنوان Textureبه یک Plan اختصاص می دهند./👇

rend.material.mainTexture = Resources.Load("glass") as Texture;

🔸 البته فرض کنید متغیر rend #کامپوننت Renderer از آبجکت Plan اســـت. /👇

var rend = Plan.GetComponent.<Renderer>();

🔰 البته دستور Resources.Load دارای یک پارامتـــر دیگر به نام systemTypeInstance اســـت. که می توان نوع خــروجی دستور را از حالت پیشفرض Object تغییر داد و نوع جدید آن را تبدیل کرد. پـــارامتر دوم در واقع نام نوع خروجی متغیر است. مثلا دستور زیر آبجکت Enemy را (فایل Enemy را) باز می کند و خروجی آن از نوع GameObject است و به کمک دستور Instantiate این آبجکت را می سازد.

var instance : GameObject = Instantiate(Resources.Load("enemy", GameObject));

👈 فرض کنید enemy یک فایل از نوع گیم آبجکت (مثلا از نوع FBX) اســـت و دستور Resource.Load آنرا از نوع GameObject بر می گرداند و دستور Instantiate این آبجکت را در بازی می سازد.

#اسکریپت_نویسی #جاوا #باز_کردن #فایل #یونیتی #کد_نویسی



کانال یونیتی لرنینگ
💢 @UnityLearning💢
FileInstantiate.js
246 B
اسکریپت آماده باز کردن یک فایل به نام enemy از مسیر جاری پروژه (Asset Folder) و ساخت آن در تابع Start

(با توجه به مطالب پست قبلی)

@UnityLearning