کانال تخصصی یونیتی ( آموزش و نکته )
1.76K subscribers
548 photos
146 videos
51 files
250 links
به نام خدا

مسئولیت مطالب یا آگهی ارسالی در کانال یا کامنت ها به عهده من یا ما نیست

لیست گروه ها و...
https://t.me/UnityEngine3D/823

برای تبلیغ در کانال و گروه :
https://t.me/UnityEngine3DAds

مدیر اصلی(مالک)
@UnityEngine
Download Telegram
Media is too big
VIEW IN TELEGRAM
آموزش PlayerPrefs و var در یونیتی به زبان #فارسی

آپارات :
https://m.aparat.com/v/Inzsl?playlist=544521#

#یونیتی
#آموزش

(آموزش رو من نساختم)

👉 @UnityEngine3D 👈
سلام. خوب هستید ؟ دوستان قراره منم اینجا هر از چند گاهی مطالب مفیدی که می تونم رو باهاتون به اشتراک بذارم. حالا بین دو تا موضوع مردد هستم.

۱- شیدرگراف. البته این رو بگم که قرار نیست اصولی و از صفر شیدر رو معرفی کنم. سعیم بر اینه که نود های پر کاربرد و نحوه ی استفاده شون و طرز تهیه ی چند تا شیدر خوشمزه رو باهاتون به اشتراک بذارم.

۲- برنامه نویسی مکانیک های مختلف. اینجوری که یه موضوع مشخص می کنیم و طی یکی دو سه قسمت اون مکانیک رو می سازیم. که خب شاید تو پروژه هاتون به درد بخوره.

پس یه نظرسنجی می ذارم نظرتون رو بگید.
سوال : چطوری از دست ارور های یونیتی راحت شم؟


جواب : اول یونیتی رو پاک کن ، بعد آنریل نصب کن اینطوری از دست ارور های یونیتی میشی و به جاش با ارور های آنریل سر و کله میزنی😂
کانال تخصصی یونیتی ( آموزش و نکته )
کدوم رو بزارم ؟
خب از اون جهت که نتایج نزدیکه سعی می کنم هر دو مورد رو پیش بریم.

امروز یه مطلب سعی می کنم از شیدرگراف بزارم براتون.

ولی زیر این پست مکانیک خاصی اگه مدنظرتون هست که باهم پیاده اش کنیم ، مثلا اگه تو بازیتون مکانیکی می خواید پیاده کنید اما نمی دونید چطوری اینکار رو کنید ، کامنت کنید که با همدیگه بسازیمش.
#آموزش_شیدرگراف
جلسه ی ۱

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

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

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

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

خب تو قسمت بعد نحوه ی استفاده از شیدرگراف رو میگم و با محیطش آشنا میشیم.
#نکته #یونیتی

ترجمه : استفاده کردن از LOD :
وقتی که آبجکت ها فاصله می‌گیرند ، LOD میتونه مش ها ، متریال ها یا شیدر ها رو تغییر بده تا فشار کمتری به gpu بیاد

👉 @UnityEngine3D 👈
کانال تخصصی یونیتی ( آموزش و نکته )
#meme
من نمی‌دونم چه برداشتی از این عکس کردید ، ولی هدف من تخریب آنریل بود😂
کدی که وقتی x مثبت بود، به اون یه واحد اضافه کنه و وقتی منفی بود ازش یه واحد کم کنه و وقتی صفر بود کاری نکنه
Anonymous Quiz
13%
if (x > 0) x++;else x--;
50%
if (x > 0) x++;else if (x < 0) x--;
32%
if (x > 0) x++;if (x < 0) x--;else x = 0;
5%
if (x == 0) x = 0;else x++;x--;
به نام خدا
سلام دوستان
امروز میخوام یه توضیحی در مورد ScriptableObject بدم و بعد یک نمونه ازش رو بسازیم و‌ چند تا نکته هم در موردش بگیم

(هزینه آموزش : صلواتی)

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


در اینجا ما میخوایم یک ScriptableObject برای نگه داری مقادیر یک ماشین ایجاد کنیم و شامل سه مقدار باشه .
مقدار اول یک رشته هست به اسم name برای فراخوانی نام ماشین .
مقدار دوم یک متغیر از نوع int و به اسم speed برای نگه داری سرعت ماشین.
و مقدار سوم و از نوع int و به اسم weight برای نگه داری وزن ماشین.
اول یک اسکریپت ساده ایجاد میکنیم و نام اون رو میگذاریم CarsData و کلاس MonoBehaviour رو به ScriptableObject تغییر میدیم چون میخوایم از نوع ScriptableObject باشه

سپس سه تا مقدار زیر رو بهش اضافه میکنیم

public new string name;
public int speed;
public float weight;

و بالای کلاس خاصیت
[CreateAssetMenu(menuName = "New Car Data")]
رو اضافه میکنیم .
چون این اسکریپت یک پیش ساخته هست باید این خاصیت رو بهش اضافه کنیم تا بشه با راست کلیک کردن توی پنجره پروژه و رفتن به Create و سپس زدن New Car Data یک نمونه از این کلاس رو ایجاد کنیم
(توجه کنید که اسکریپت CarsData یک پیش ساخته هست و اون نمونه های ایجاد شده ، داده ها رو نگه داری میکنند)


الان با راست کلیک کردن توی پنجره پروژه و رفتن به Create ، و سپس زدن New Car Data یک نمونه از این کلاس رو ایجاد کنیم ، و اسمش رو میگذاریم Pride (توجه کنید که توی فایل های نمونه سازی شده یعنی همین فایلی که الان ایجاد کردید داده ها ذخیره میشوند)
حالا فیلد name رو میگذاریم پراید (اگه دوست داشتید انگلیسی بگذارید)

فیلد speed رو میگذاریم 1000

و فیلد weight رو میگذاریم روی 1 که قشنگ با این سرعت و وزن پرواز کنه😂

یک اسکریپت دیگه برای فراخوانی کردن این داده ها ایجاد میکنیم (اسکریپت عادی) و مثلا اسمش رو میگذاریم ScriptableSystem

در قسمت متغیر ها
public CarsData Pride;
رو مینویسیم

این اسکریپت رو به یک گیم آبجکت میدیم ، سپس اون فایل Pride که داخل پروژه هست رو به فیلد اسکریپت که از جنس CarsData هست نسبت میدیم

برای دریافت اطلاعات از فایل ، توی متد Start یا Update بسته به نیازتون اون رو به دست میارید(توی همین اسکریپتی که تازه ساختید(ScriptableSystem))

مثلا برای به دست آوردن سرعتش و چاپ اون مینویسید :
Debug.Log(Pride.speed);

و اگه خواستید سرعت ماشین رو زیاد کنید مینویسید :
Pride.speed = 2000;

نکته ۱ :
شما میتونید توی اسکریپت اصلی یا همون پیش ساخته (CarsData) یک متد برای راحتی کار قرار بدید . مثلا میخواید کل مشخصات ماشین چاپ بشه ، برای اینکار توی اسکریپت CarsData یک متد مثل زیر ایجاد میکنید :
public void PrintInformation(){

Debug.Log("Name : " + name + "," + "Speed : " + speed + "," + "Weight : " + weight);

}

و بعد میتونید داخل اسکریپت ScriptableSystem اون رو اجرا کنید
مثلا :
Pride.PrintInformation();

در صورت استفاده از این روش (یعنی همین که توی فایل CarsData متد میگذاریم) اگر تعداد ماشین های شما زیاد بود کار شما رو راحت میکنه ولی اگه مثلا این کار رو نکردید باید برای هر ماشین جداگونه بنویسید
مثلا :

Debug.Log("Name : " + Pride.name + "," + "Speed : " + Pride.speed + "," + "Weight : " + Pride.weight);

Debug.Log("Name : " + Peykan.name + "," + "Speed : " + Peykan.speed + "," + "Weight : " + Peykan.weight);

ولی در صورت استفاده از این روش راحت مینویسید :
Pride.PrintInformation();
Peykan.PrintInformation();

(در اینجا Peykan یک نمونه سازی دیگر از کلاس CarsData هست)


نکته ۲ :
کلا PlayerPrefs برای ذخیره داده های کاربر مثل تنظیمات گرافیک یا چیز های غیر مهم استفاده میشود ، و خودکار ذخیره نمیشوند ، ولی Scriptable Object به صورت خودکار ذخیره میشود و فکر کنم هم سرعت بیشتری نسبت به PlayerPrefs دارد
و PlayerPrefs در خروجی هم ذخیره میشه ولی Scriptable Object در خروجی امکان تغییرش هست منتها بعد از بسته شدن به حالت اول بر میگرده و برای ذخیره کردن داده ها در خروجی استفاده نمیشه و از نظر امنیت احتمالا بشه با دیکامپایل کردن مقادیرش رو تغییر داد



#یونیتی #آموزش #فارسی


👉 @UnityEngine3D 👈
با فرض x=1 مقدار z=؟

x=1 y=x++ z=y-x z=?
Anonymous Quiz
5%
-3
0%
-2
16%
-1
13%
0
52%
1
4%
2
2%
3
1%
int
3%
Error
6%
هیچکدام
سالروز آغاز امامت حضرت مهدی (عج) مبارک