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

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

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

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

مدیر اصلی(مالک)
@UnityEngine
Download Telegram
#نکته #یونیتی

ترجمه : استفاده کردن از 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%
هیچکدام
سالروز آغاز امامت حضرت مهدی (عج) مبارک
کانال تخصصی یونیتی ( آموزش و نکته )
با فرض x=1 مقدار z=؟

x=1 y=x++ z=y-x z=?
توضیح این سوال
x=1
(x=1)
y=x++
(y=1,x=2)
z=y-x
(z=1-2=-1)

نکته در خط
y=x++
هست
اون خط این شکلی اجرا میشه:
y=x
x=x+1

ترتیب اجرای عملیات ++ مهمه
یعنی الان اگر من توی کد بنویسم
y=x++
با

y=++x
متفاوته
y=++x
میشه این
x=x+1
y=x

که جواب توی این حالت میشه 0

و افرادی که گفتن 1 جواب درست هست، احتمالا فرض کردن که
x++ == x+1
هست اما در واقعیت
x++ == x=x+1
هست

نتیجه اخلاقی سوال بعدی یک کم سخت تره و اگه نکته رو متوجه شده باشید میتونید جواب بدید

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


👉 @UnityEngine3D 👈
کانال تخصصی یونیتی ( آموزش و نکته )
به نام خدا سلام دوستان امروز میخوام یه توضیحی در مورد ScriptableObject بدم و بعد یک نمونه ازش رو بسازیم و‌ چند تا نکته هم در موردش بگیم (هزینه آموزش : صلواتی) خب این نوع از اسکریپت ها برای ذخیره کردن داده ها یا فراخوانی داده ها به کار میرن و اگر تغییری…
دوستان من یک چیز رو اونجا توی آموزش ScriptableObject تصحیح کنم (البته الان تصحیحش کردم) ، اینکه با توجه به نوشته بالا در ادیتور هم در موقع اجرا و هم به صورت دستی امکان تغییر وجود داره و ذخیره میشه ولی در خروجی میشه فراخوانیش کرد ولی اگه تغییرش بدید احتمالا بعد از خروج بازی دوباره به حالت اول بر میگرده (برای ذخیره کردن داده ها در خروجی استفاده نمیشه)

(اگر مشکلی بود کامنت بدید حتما)
مرض سیو کردن😂

#meme
#نکته #یونیتی

ترجمه :
استفاده کردن از Frame Debugger :

فریم دیباگر میتونه نمایش بده که هر فریم چطوری به طور جداگانه از draw calls ها ساخته شده
و از این ابزار میتونید برای عیب یابی ویژگی های شیدر ها استفاده کنید و کمک میکنه چطوری رندر شدن بازیتون رو تجزیه و تحلیل کنید


👉 @UnityEngine3D 👈
Media is too big
VIEW IN TELEGRAM
#چطور_بسازیمش
قسمت اول : بازی حافظه ی شنیداری

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