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
⭕️ #آبجکت تونل برای استفاده در راهها به همراه کف خیابان (Road)

🛣 با فرمت Fbx آماده جهت استفاده

آبجکت Tunnel Road

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

@UnityLearning
jwdyrb0rpkow_Tunnel.rar
2 MB
🛣 #دانلود #آبجکت لازم برای ساخت تونل در جاده ها

📍برای بیشتر شدن طول تونل آبجکت را Scale نکنید، بلکه Duplicate کنید و آنرا پشت سر هم تکرار کنید.

@UnityLearning
DownloadTexture.js
467 B
اسکریپت آماده دانلود یک تکسچر دو بعدی از اینترنت و اختصاص آن به عنوان #تکسچر به یک آبجکت(که کد را به آن متصل شده است)

🔴 اسکریپت ویرایش شده👇

https://t.me/UnityLearning/1098

@UnityLearning
دریافت اطلاعات از اینترنت #ادامه

با توجه به استقبال بالای کاربران از آمــوزش اتصال بازی به اینترنت، این آموزش ادامه پیدا می کند.

با توجه به مطـــالب قبلی، ادامه دستورات کلاس WWW را به این شرح توضیح می دهیم/👇 (با فــرض اینکه همچنان net از نوع WWW اســت)

🔹با دستــور progress می توان میزان دانلود را بررسی نمود، این متغیر float از 0 تا یک است و اگر برابر 1.0 شود یعنی دانلود به طور کامل صورت گرفته، بنابراین اگر می خواهید میزان دانلود شما به صورت درصدی نمایش داده شود، این متغیر را در 100 ضرب کنید./👇

net.progress;

🔸با #تابع Dispose می توان جلوی دانلود را گــرفت. اگر به هر دلیل لازم بود دانلود دیگر انجام نشود با این دستور می توان دانلود را متوقف کرد. /👇

net.Dispose();

👈 با دستور uploadProgress می توان به میزان آپلود دسترسی داشت، دستورات ارسال اطلاعات به اینترنت (در قالب فرم) را در پســت های بعدی قـــرار خواهیم داد، دستور uploadProgress مقدار اطلاعات آپلود شده در سرور را نمایش می دهد. (این دستور مانند progress اســـت)

#اسکریپت_نویسی #یونیتی #اینترنت


کانال یونیتی لرنینگ
💢 @UnityLearning💢
دریافت اطلاعات از اینترنت #نکته

👈 همانطور که در اسکریپت قرار داده شده در کانال مشاهده می کنید، این اسکریپت تصویر را به عنوان تکسچر نمایش نمی دهد. اما علت چیست؟ با این مثال می خواهیم کاربرد صحیح دستور isDone را بیان کنیم.

🔸 علت این مشکل این است که ما در همان لحظه که متغیر را از کلاس WWW می سازیم می خواهیم از تکسچر آن استفاده کنیم، این یعنی هنوز تصویری/ یا هر چیزی، دانلود نشده است و ما به اسکریپت می گوییم، تکسچر را نمایش بده.

🔹 همانطور که قبلا ذکر کردیم دستور isDone زمانی true می شود که دانلود محتویات سایت به طور کامل در متغیر انجام شده است، بنابراین اگـــر ما در اسکریپت تا زمانی که isDone بــرابر true شد تاخیر ایجاد کنیم و سپس دستورات انتساب تکسچر را انجام دهیم، این مشکل حل می شود. به علت اینکه دستور isDone از نوع boolean اســـت بنابراین بهترین راه برای ایجاد تاخیر استفاده از حلقه While است به شکل زیر/👇

while(!www.isDone);

👈 این دستور اجرای اسکریپت را تا زمانی که صفحه اینترنتی کاملا دانلود نشده است در همین خط متوقف می کند. اسکریپت ویرایش شده در پست بعدی قرار می گیرد، این اسکریپت تکسچری را که از URL دانلود می کند به آبجکتی که کد به آن متصل شده است می دهد. URL یک متغیر رشته ای سراسری است که می توانید سایت مورد نظر را در آن وارد کنید.

#اسکریپت_نویسی #اینترنت #جاوا #سی_شارپ


کانال یونیتی لرنینگ
💢 @UnityLearning💢
DownloadTexture.js
382 B
اسکریپت ویرایش شده برای «دانلود #تکسچر از اینترنت» و انتساب آن به آبجکتی که کد را به آن متصل کرده ایم.

🔹 به همراه دستور While بــرای ایجاد تاخیر

@UnityLearning
This media is not supported in your browser
VIEW IN TELEGRAM
⭕️ #آموزش حذف Splash ابتدایی بازی

👈ـSplash همان فیلم کوتاه معرفی بازی است که پیش فرض آرم یونیتی را نمایش می دهد.

#درخواست
@UnityLearning
Unity Learning
OpenDoor_Ashiane.js
OpenDoor_LeftRight.js
839 B
⭕️اسکریپت آماده برای باز و بسته شدن درب هایی که به صورت چپ و راستی باز بسته می شوند.

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

@UnityLearning
روش دیگــری برای انجام اعمالی که باید با نزدیک شدن به آبجکت ها انجام گیرد (غیر از روش وقت گیر Trigger)

🔹 در روش های قبل برای انجام این گونه اعمال (مثل باز کردن درب) از Trigger ها استفاده می شد که هم درد سر ساز و هم طراحی آن کمی سخت بود. البته در همینجا خاطر نشان می شود، برخی اعمال باید توسط Trigger انجام شود و جایگزین ندارد. مثل حالت سوار شدن به ماشین که فقط باید زمانی رخ دهد که کاربر در محل مورد نظر ما قـــرار گرفته است.

🔸 برای اعمال دیــگری مثل همین موضوع باز و بسته کردن درب ها روش دیگری ارائه می شود(که در اسکریپت پست قبل مشهود است) و آن محاسبه فاصله آبجکت تا Player است. اگر اسکریپت بتواند به آبجکت Player دسترسی داشته باشد و فاصله او تا درب را محاسبه کند می توانیم با دستور if کاری کنیم هر گاه این فاصله کمتر از یک حد معمول شد، و کلید مورد نظر فشار داده شد، عمل انجام شود. مثلاً درب باز یا بسته شود و یا آژیر خطر فعال شود.

(این روش در اسکریپت کاملا انجام شده است و کلیه دستورات نیز در کانال توضیح داده شده است، برای بدست آوردن آبجکت
ـ Player از دستور FindWithTag استفاده شده است و برای محاسبه فاصلــه از Distance)

👈 دقت کنید این روش برای بازی های چند نفری یا بازی هایی که در یک آن چند Player دارد غیر قابل انجام است و تنها در بازی هایی قابل پیاده سازی است که در آن در حل لحظه تنها یک Player وجود دارد. بنابراین برای انجام اینگونه موارد (انجام عمل در بازی های چند نفری) تنها راه استفاده از Trigger هاست.

مزیت این روش ساده بودن آن است، شما اسکریپتی که نوشتید را به هر آبجکت مشابهی بدهید عمل بدون مشکل انجام می شود، بدون اینکه لازم باشد به آبجکت Trigger بدهید.

عیب این روش اجرای همیشگی اسکریپت است و اگر تعداد عمل ها (مثلا تعداد درب ها) زیاد باشد، سرعت اجرای بازی کاهش میابد چون تمام اسکریپت ها همیشه در حال محاسبه فاصله دو آبجکت هستند و هیچگاه متوقف نمی شوند. اما استفاده از روش Trigger باعث می شود اسکریپت تنها زمانی اجــرا شود که کاراکتر (Player) وارد محدوده شده و در خارج آن هیچ کدی اجرا نمی شود.

#اسکریپت_نویسی #کد_نویسی #جاوا #باز_و_بسته_شدن_درب


کانال یونیتی لرنینگ
💢 @UnityLearning💢
⭕️ انجام اعمال مربوط به ماتریس ها

📟 گاهی اوقات در ساخت بازی لازم است به محاسبات ماتریسی دسترسی داشته باشیم. همانطور که برای انجام اعمال ریاضی از mathf استفاده می‌شود، برای انجام اعمال ماتریسی از #کلاس Matrix4x4 استفاده می‌شود. این کلاس کلیه محاسبات لازم ماتریسی را انجام میدهد(البته ماتریس 4 در 4)

💡این گونه محاسبات در اعمال حرکتی و چرخشی(Vector3 و Quarternion) بسیار مورد استفاده قرار می‌گیرند.

📍به طور #مثال با دستور determinant دترمینان یک متغیر که از نوع ماتریسی است را بر می گرداند. این متغیر (دترمینان) از نوع float است.

▫️برای محاسبه معکوس یک ماتریس نیز از inverse استفاده می‌شود که خروجی آن از نوع ماتریسی است (Matrix4x4)

🔜 در سایر پست ها نحوه کار با متغیر های ماتریسی را بیشتر بررسی خواهیم کرد.

#اسکریپت_نویسی #جاوا #یونیتی #ماتریس


⭕️کانال یونیتی لرنینگ⭕️
💢@UnityLearning💢
🚀 #آبجکت موشک هوا به هوا

🛩 قابل استفاده برای موشک هواپیما های جنگی

فرمت های مختلف آبجکت در دسترس است.

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

@UnityLearning
i19xown45atc_AIM120DMissile.rar
10.2 MB
⭕️ #آبجکت آماده برای موشک هواپیما های جنگی

AIM-120D Missile 

🔹با فرمت های مختلف 3ds fbx obj و...

@UnityLearning
🔴 #خبر مهم

🔹وزیر ارتباطات: در مورد بازی نهنگ آبی اطلاع رسانی کنید، بازی چالش نهنگ آبی به ایران نمی‌آید.


🐳 نهنگ آبی بازیی که در سال 2013 ارائه شد یک بازی چالش بر انگیز است که در کشور های خاصی عرضه شد. در این بازی از شما یک سری عمل خواسته شده و شما باید آنرا در طول روز یا شب انجام دهید. مثلا از شما می خواهد با چاقو🔪 روی دست خود یک شکل بکشید و سپس باید از طرح خود عکس بگیرید تا به مرحله بعد بروید. این بازی که باعث تاثیر گذاری شدید روی روح و روان بازی کنان می شود در مراحل پایانی خواستار خودکشی افراد می‌گردد. اصلا نام بازی از همین موضوع گرفته شده و اشاره به خودکشی نهنگ ها دارد.

لطفا این مطلب را #انتشار_دهید تا دیگران نیز از ماهیت این بازی با خبر شوند.

@UnityLearning
⭕️باز شدن صفحه کلید لمسی در بازی

در یونیتی برای باز شدن صفحه کلید لمسی گوشی های موبایل از کلاس TouchScreenKeyboard استفاده می‌شود، این کلاس با توجه به نوع سیستم عامل گوشی (یعنی iOS ، #اندروید ، ویندوز فون و...) صفحه کلید مورد نظر را باز می‌کند. برای باز شدن صفحه کلید از دستور Open استفاده می‌شود. این دستور پارامتر های بسیاری دارد که دو پارامتر اول از همه مهمتر هستند.

🖱پارامتر اول متن اولیه برای ویرایش است (یعنی این کیبورد به طور پیش فرض یک متن را به بازی (محل نوشتن) ارسال می‌کند معمولا این پارامتر خالی است ( "" )

💡پارامتر دوم نوع صفحه کلید است، مثلا صفحه کلید عددی گوشی یا صفحه کلید متنی و... این پارامتر ورودی های بسیاری دارد که همه آنها را در یک اسکریپت آماده قرار می‌دهیم تا آنها را مشاهده کنید. به طور مثال اگر بخواهیم صفحه کلید عددی گوشی باز شود دستورات زیر را می‌نویسیم/👇

var keyboard: TouchScreenKeyboard;

keyboard = TouchScreenKeyboard.Open("", TouchScreenKeyboardType.NumberPad);

(ابتدا یک متغیر از کلاس تعریف کرده و سپس آنرا برابر دستور Open قرار می‌دهیم)

📍 #کلاس TouchScreenKeyboard دستورات بسیاری برای بهره گیری از حداکثر قابلیت های صفحه کلید گوشی ها دارد که در پست های بعدی توضیح داده خواهد شد.

🔘 اسکریپت انواع حالات صفحه کلید که این کار را توسط انتخاب دکمه ها انجام می‌دهد(یعنی شما در ابتدا یکی از دکمه ها را انتخاب کنید و صفحه کلید مورد نظر باز شود) در پست بعدی قرار خواهد گرفت.

👈 #ادامه_دارد


#اسکریپت_نویسی #جاوا #یونیتی #صفحه_کلید


⭕️کانال یونیتی لرنینگ⭕️
💢@UnityLearning💢
Touch_Screen_Keyboard.js
1.7 KB
⭕️ اسکریپت آماده باز شدن صفحه کلید لمسی

🔹نمایش انواع صفحه کلید لمسی با انتخاب توسط کاربر

🔸خروجی فقط در موبایل ها قابل نمایش است.

@UnityLearning
🌹علے را وصف در باور نیاید
زبان هرگز ز وصفش بر نیاید

💐علی با درد غربت آشنا بود
علی تنها ترین مرد خدا بود

🌷علی در آستین دست خدا داشت
قدم در آستان کبریا داشت

🌸پیشاپیش عید غدیر مبارک🌸
#نکته #برنامه_نویسی

⭕️ توضیحاتی در مورد کلاس Vector3

🔹مطالب مربوط به حرکت توسط کلاس Vector3


👈همانطور که می دانیم این کلاس برای انجام عملیات مربوط به صفحه مختصات سه بعدی(دارای محور های xyz) به کار می‌رود.

🔸حال به طور #مثال فرض کنید می خواهید یک شی را جابجا کنید، این کار در ساده ترین روش با تغییر پارامتر های xyz از پارامتر position مربوط به کلاس transform قابل انجام است. مثلا دستور زیر در هر بار اجرا 5 واحد به مقدار x از position آبجکت جاری اضافه می‌کند/👇

transform.position.x += 5 ;

🔹اما اکنون فرض کنید یک آبجکت تنها به یک سمت حرکت کند، مثلا روبرو . در این صورت استفاده از دستور فوق باعث حرکت آبجکت می‌شود ولی نه همیشه به سمت روبرو (چون نسبت چرخش آبجکت متفاوت است به بیان دیگر چون آبجکت می‌چرخد دیگر حرکت او در محور x باعث حرکت به سمت روبرو نمی‌شود. راه حل این مسئله استفاده از دستور و #کلاس Vector3 است (تفاوتی در محل استفاده از دستور نیست، یعنی فرقی نمی کند از دستور Translate برای جابجایی استفاده کنیم یا از دستورات دیگر، مهم استفاده از کلاس Vector3 است. به طور مثال دستور زیر آبجکت مورد نظر را (که کد به آن متصل شده است) به سمت روبرو جابجا میکند (پیش فرض 1 واحد و اگر بخواهید مقدار بیشتر شود باید خروجی دستور Vector3 را در آن مقدار ضرب کنید.

transform.position += Vector3.forward ;

transform.Translate(Vector3.forward);

▪️خروجی هر دو دستور بالا یکسان بوده و نهایتا آبجکت به سمت روبرو حرکت می‌کند (باید توجه کنید اگر می‌خواهید از این دستورات در تابع Update استفاده کنید باید مقادیر Vector3.forward را در Time.deltaTime ضرب کنید تا از نظر زمانی خروجی در تمام دستگاه ها یکسان گردد)

👈اکنون سایر دستورات که مربوط به کلاس Vector3 است و مربوط به حرکت به جهات مختلف می‌شود را بررسی می‌کنیم.

🔹حرکت به سمت عقب (مخالف جهت روبرو)
Vector3.back;

🔹حرکت به سمت بالا
Vector3.up;

🔹حرکت به سمت پایین
Vector3.down;

🔹حرکت به سمت راست
Vector3.right;

🔹حرکت به سمت چپ
Vector3.left;

🔹یک واحد حرکت به تمام جهات (xyz)
Vector3.one ;


#اسکریپت_نویسی #جاوا #سی_شارپ

❗️نکته بسیار مهم: یک بردار در ریاضیات یک جهت و یک طول دارد، در واقع برای نمایش یک بردار در صفحه مختصات لازم است جهت و طول آن مشخص شود، بنابر این در اصل دستورات ذکر شده بردار های جهتی تولید شده هستند که باعث حرکت آبجکت(ها) در جهت و به میزان طول خود می‌شوند. طول پیش فرض تمامی بردار های بالا 1 واحد است و با ضرب عدد در آن می‌توان مقدار آن را تغییر داد.


⭕️کانال یونیتی لرنینگ⭕️
💢@UnityLearning💢
سِیو کردن بازی ( Game Saving)

🔸 یکی از مهمــترین شرایطی که بازی ها می توانند داشته باشد، قابلیت ذخیره (سِیو) در آنهاست. سیو در بازی می تواند در حالـــت های متفاوتی اتفاق بیافتد. مثـــلاً سیو مراحل بازی یا سیو تمام بخش های بازی در زمان زدن گزینه Save توسط کاربر.

ابتدا ساده ترین روش سیو یعنی سیو مراحل بازی را، آن هم با ساده ترین روش بیان می کنیم. با این کار می خواهیم بازیکن در هر سیستمی به هر مرحله ای رفت، آن مرحله سیو شود و اگـــر مجدداً بازی را باز کــرد، بازی از همان مرحله برایش باز شود.

🔹 ذخیره مرحله بازی را روی #فایل انجام می دهیم. (فایل متنی) بنابراین اگـــر در مورد ذخیره فایل متنی مطالب را نمی دانید پست مربوطه را مطالعه کنید. /👇

https://telegram.me/UnityLearning/458

بنابراین کافی است زمانی که کاربر به مرحله جدید می رود (حال در تابع Start آن مرحله یا توابع دیگر) شماره مرحله یا نام آن را در یک فایل که برای این کار (سیو بازی) ساخته می شود، فـــرار دهیم و همیشه در ابتدای بازی یک اسکریپت داشته باشیم که دستور

Application.LoadLevel

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

در صورتی که به یاد داشته باشید در آموزش مربوط به فایل، اسکریپت بسیار کاربردی برای ذخیره فایل متنی در مسیر داده شده و همچنین خواندن از آن و قرار دادن متن در متغیر رشته ای را قرار دادیم به کمک این توابع به راحتی عمل نوشتن نام و یا شماره مرحله در فایل امکان پذیر است، مثلا به کمک دستورات زیر فایلی را می سازیم که شامل شماره مرحله بازی است/👇 (دقت کنید فرض بر این است که توابع WriteFile و ReadFile که خودمان نوشتیم را به اسکریپت داده ایم.)

WriteFile(Application.dataPath+"\\Save.txt",Application.loadedLevel.ToString());

🔹 این دستور شماره مرحله جاری را در یک فایل به نام Save.txt در مسیر جاری بازی (متفاوت برای پلتفرم های مختلف) ذخیره می کند.

👈 با دستور زیر هم می توانید این شماره را در یک String قرار دهید و بر اساس آن تصمیم بگیرید که چه مرحله load شود/👇

var Level=ReadFile(Application.dataPath+"\\Save.txt");

🔸 متغیر Level از نوع رشته ای و شامل نام فایل مورد نظر می باشد. البته باید دقت کرد که این فایل باید وجود داشــته باشد (در صورتی که وجود نداشته باشد این دستور با خطا مواجه می گردد بنابراین باید دقت کرد که دستور در چه محلی صدا زده می شود.)

🔹 اسکریپت آماده تمام مطالبی که بیان شد، در کانال و در پست های بـــعدی قرار خواهد گرفت. این اسکریپت ها شامل 1- اسکریپت برای ذخیره شماره مرحله بازی در یک فایل در محل لود شدن مرحله بعد است (یعنی زمانی که کاربر به مرحله بعد می رود شماره آن در فایل ذخیره شود) 2- اسکریپت بار گزاری بازی از روی فایل ذخیره شده (تابع Start) و اجرای مرحله مورد نظر است.

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


کانال یونیتی لرنینگ
💢 @UnityLearning💢
LoadLevel_Save.js
889 B
⭕️اسکریپت سیو کردن مرحله (در هنگام لود مرحله بعد) در مسیر جاری بازی و در فایل Save.txt

🔹ما این کار را با یک Button انجام داده ایم، شما هر وقت لازم بود مرحله بعدی لود شود، تابع را صدا بزنید.
LoadLevel_FromFile.js
664 B
⭕️اسکریپت لود کردن مرحله بازی از روی فایل Save.txt
که البته برای شروع اولیه باید ابتدا مقدار 0 در آن باشد. (فایل را دستی بسازید)

🔹این اسکریپت را می‌توانید به یک GameObject خالی در مرحله اول بدهید.
⭕️ #دانلود #آبجکت سِپر ساخته شده با 3D MAX

🔹فرمت فایل max و fbx

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

@UnityLearning