Start Unity
374 subscribers
7 photos
1 video
11 links
هیچ پروسه ای سخت نیست به شرطی که شروعش کنی..

🎮 #یونیتی
👨‍💻 #برنامه_نویسی
📚 #آموزش
🧩 #آزمون

گروه: @StartUnityGP

🫂 @AmirHDeveloper @HaminGames
Download Telegram
💡 نورپردازی در یونیتی و انواع آن

نورپردازی یکی از اجزای اصلی در بازی‌سازی است و می‌تواند حس و حال صحنه‌ها را کاملاً متحول کند. در یونیتی، چندین نوع نور وجود دارد که هرکدام کاربرد خاص خود را دارند. با ترکیب این نورها، می‌توانید صحنه‌هایی زیبا و واقعی‌تر بسازید.

---

1. نور Directional Light ☀️
این نور شبیه‌ساز نور خورشید است که در کل صحنه به طور یکسان تابیده می‌شود. نور Directional جهت دارد و برای نورپردازی محیط‌های باز مثل نور خورشید یا ماه استفاده می‌شود.
کاربرد: مناسب برای محیط‌های خارجی و صحنه‌های با نورپردازی کلی و یکنواخت.

2. نور Point Light 💡
این نور از یک نقطه به اطراف پخش می‌شود، مانند لامپ که نور را به همه جهات می‌تاباند. در فاصله‌های دورتر ضعیف‌تر می‌شود و بیشتر در محیط‌های بسته کاربرد دارد.
کاربرد: شبیه‌سازی چراغ‌ها، مشعل‌ها یا هر منبع نوری نقطه‌ای در فضای بسته.

3. نور Spot Light 🔦
این نور از یک نقطه با زاویه خاص تابیده می‌شود، مثل نورافکن یا چراغ‌قوه که جهت مشخصی دارد.
کاربرد: برای ایجاد جلوه‌هایی مثل نورافکن صحنه یا چراغ‌های داخلی خانه.

4. نور Area Light 🌆 (فقط در HDRP)
نور Area از یک سطح وسیع تابیده و برای روشن کردن فضاهای بسته استفاده می‌شود. این نور تنها در رندر HDRP موجود است.
کاربرد: ایجاد نور طبیعی‌تر در فضاهایی مثل نور پنجره در اتاق.

5. نور Ambient Light 🌌
این نور روشنایی پایه صحنه را تأمین می‌کند و تنظیمات کلی روشنایی را برای محیط مشخص می‌کند. در یونیتی، از بخش Global Illumination تنظیم می‌شود.
کاربرد: مناسب برای تنظیم روشنایی عمومی صحنه.

---

نمونه کد برای شبیه‌سازی چرخه روز و شب با Directional Light
با استفاده از نور Directional و تغییر زاویه، می‌توان چرخه روز و شب 🌞🌜را شبیه‌سازی کرد:

public class DayNightCycle : MonoBehaviour
{
public Light directionalLight;

void Update()
{
// چرخش نور برای شبیه‌سازی روز و شب
directionalLight.transform.Rotate(Vector3.right * Time.deltaTime * 10);
}
}


---

🛠 نکات مهم:
- سایه‌ها (Shadows): فعال‌سازی سایه‌ها 🌑 برای طبیعی‌تر شدن نورپردازی کمک‌کننده است.
- شدت نور: برای جلوه طبیعی‌تر، شدت نورها را بر اساس محیط تنظیم کنید.
- بهینه‌سازی: استفاده از تعداد زیاد Point و Spot Light می‌تواند بر عملکرد بازی تأثیر بگذارد، پس فقط در جاهای ضروری استفاده کنید.

این تنظیمات، فضایی واقعی‌تر و جذاب‌تر برای بازی شما فراهم می‌کنند. 🌟

#یونیتی #نورپردازی #بازی‌سازی #Lighting #Unity
👍64🗿1
📌 قانون خوشگل‌نویسی تو C#

🧠 یه چیزی هست که کدت رو از "فقط کار کردن" به "تمیز و قابل فهم" تبدیل می‌کنه: اسم‌گذاری درست!

بیا با هم یاد بگیریم چه موقع از حروف بزرگ یا کوچیک اول اسم استفاده کنیم.


🎯 تعریف PascalCase چیه؟

🔹 یعنی هر کلمه با حرف بزرگ شروع میشه
🔹 مثل اینا:

PlayerHealth  
StartGame
CurrentLevel


استفاده‌ش برای ایناست:

● اسم کلاس‌ها 👉 GameManager
● متدها 👉 LoadLevel()
● پراپرتی‌ها 👉 public int LifeCount { get; private set; }


🎯 تعریف camelCase چیه؟

🔹 یعنی اولین کلمه با حرف کوچیک شروع میشه، بقیش بزرگ
🔹 مثل اینا:

playerHealth  
startGame
currentLevel


اینو کجا استفاده می‌کنیم؟

● برای متغیرها و فیلدهای معمولی
● پارامترها
● فیلدهای private:

private int lifeCount;
private GameObject savedPoint;



🔥 مثال درست ترکیبی:

public class GameManager : MonoBehaviour
{
public static GameManager Instance { get; private set; }

public int LifeCount { get; private set; } // پراپرتی = PascalCase
private int lifeCount; // فیلد = camelCase

public void LoadLevel() { } // متد = PascalCase
}



اشتباه رایج چیه؟

🔻 اشتباه اینه که پراپرتی رو با حرف کوچیک بنویسی:

public int lifeCount { get; private set; } // 😬 اشتباهه


درستش اینه:

public int LifeCount { get; private set; } // 😎 عالیه



💡 چرا اینا مهمه؟

🔸 چون کدت خوش‌خوان‌تر میشه
🔸 همه IDEها (ویژوال استودیو، رایدر و...) طبق همین استاندارده جلو میرن
🔸 اگه تو تیم باشی یا کدت رو بدی دست یکی دیگه، سریع می‌فهمه چی به چیه


🧵 تهش اینو بگم:
کدی که فقط کار می‌کنه نه!
کدی که خوندنش کیف بده، اون حرفه‌ایه 😎

📎 سیو کن یادت نره ✌️


#یونیتی #برنامه_نویسی
#CSharp #CodeStyle #Unity
8👍4🙏21
📣 معرفی OpenUPM: دروازه ای برای پکیج‌های یونیتی

امروز می‌خوام بهتون OpenUPM رو معرفی کنم، یک مخزن (registry) متن‌باز برای پکیج‌های یونیتی (Unity Package Manager - UPM) که کار رو برای توسعه‌دهندگان خیلی آسون‌تر کرده.

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

اهمیت اوپن‌یو‌پی‌ام از چند جهت مشخصه:

دسترسی آسان‌تر: می‌تونید به هزاران پکیج متن‌باز که توسط کامیونیتی یونیتی ساخته شده، دسترسی داشته باشید.
انتشار آسان: توسعه‌دهنده‌ها می‌تونن پکیج‌های خودشون رو با دردسر کمتری منتشر کنند و با بقیه به اشتراک بذارن.
کنترل بیشتر: شما کنترل بیشتری روی نسخه‌های پکیج‌هاتون و وابستگی‌هاشون خواهید داشت.

ابزارهای OpenUPM

اوپن‌یو‌پی‌ام یک سری ابزار کاربردی داره که کار باهاش رو راحت‌تر می‌کنه:

سایت اوپن‌یو‌پی‌ام (openupm.com): جایی که می‌تونید پکیج‌ها رو جستجو کنید، اطلاعاتشون رو ببینید و مستندات رو مطالعه کنید.
● ابزار OpenUPM CLI: یک ابزار خط فرمان که بهتون اجازه می‌ده پکیج‌ها رو نصب و مدیریت کنید.

انتشار پکیج در OpenUPM

شما هم می‌تونید پکیج‌های خودتون رو در OpenUPM منتشر کنید!

برای این کار، پکیج شما باید از ساختار UPM پیروی کنه.
همچنین، کد شما باید متن‌باز باشه و روی گیت‌هاب (GitHub) یا پلتفرم‌های مشابه موجود باشه.
سپس، می‌تونید درخواست (pull request) بدید تا پکیج شما به لیست OpenUPM اضافه بشه.

نصب OpenUPM CLI و افزودن پکیج

برای استفاده از OpenUPM CLI، ابتدا باید Node.js رو روی سیستمتون نصب داشته باشید.
سپس، می‌تونید با دستور زیر OpenUPM CLI رو نصب کنید:

npm install -g openupm-cli


بعد از نصب، برای افزودن یک پکیج به پروژه یونیتی خودتون، کافیه در پوشه پروژه دستور زیر رو اجرا کنید.
به عنوان مثال، برای پکیج خودم `wold.magic.webads`، دستور به این صورته:

openupm add wold.magic.webads


با این کار، پکیج به پروژه شما اضافه میشه و می‌تونید ازش استفاده کنید.

#یونیتی #برنامه_نویسی #پکیج_یونیتی #متن_باز
#Unity #UPM #OpenUPM #UnityPackages
🔥9👍2
🚀 چرا باید از Git استفاده کنیم؟

حتی اگر مبتدی هستی، حتی اگر تک‌نفره کار می‌کنی.

یکی از خطرناک‌ترین باورها بین برنامه‌نویس‌ها و بازی‌سازها (مخصوصا تازه‌کارها) اینه:

💬 "فعلا نیازی به Git ندارم، پروژه‌م کوچیکه و تنهایی کار می‌کنم..."

این جمله می‌تونه ماه‌ها جلوی رشد فنی شما رو بگیره.

گیت فقط برای پروژه‌های تیمی یا بزرگه؟

نه! گیت یک ابزار پایه‌ای برای توسعه نرم‌افزاره. مثل نفس کشیدن برای یک برنامه‌نویس.
درسته که توی تیم و پروژه‌های بزرگ، بدون گیت کاری پیش نمیره، ولی حتی اگه:

▫️ تنهایی کار می‌کنی
▫️ پروژه‌ت ساده‌ست
▫️ هنوز در حال یادگیری هستی

باز هم گیت یک نجات‌دهنده‌ست.

چرا گیت حتی در پروژه‌های انفرادی هم نیازه؟

تاریخچه‌ی کامل پروژه
می‌تونی به هر زمانی در گذشته برگردی و ببینی دقیقا چه زمان، چه چیزی رو تغییر دادی. دیگه خبری از فایل‌های Final_v4_last_REAL.zip 😂 نیست.

🧪 آزمون و خطای بدون استرس
بدون نگرانی از خراب شدن کد، ویژگی‌های جدید رو تست کن. چون می‌دونی با یک دستور ساده (revert) همه‌چیز به حالت قبل برمی‌گرده.

☁️ بک‌آپ هوشمند و واقعی
گیت یک سیستم بک‌آپ معمولی نیست؛ یک ورژن کنترل قدرتمنده. یعنی با هر تغییر، فقط همون تغییرات رو ذخیره می‌کنه نه کل پروژه رو. با GitHub یا GitLab هم یک بک‌آپ ابری امن داری.

📈 عادت‌سازی برای آینده‌ی حرفه‌ای
اگه الان تنبلی کنی و یادش نگیری، وقتی وارد یک تیم واقعی بشی یا پروژه‌ت بزرگ بشه، مجبوری کلی چیز جدید رو با استرس و عجله یاد بگیری. پس از الان پیش‌دستی کن!

🎯 اما بعضی‌ها میگن:

💬 "من با Unity Collaborate یا Plastic SCM راحت‌ترم."
💬 "یه فلش برای بک‌آپ دارم، کافیه دیگه."

دو نکته‌ی مهم:

1️⃣ ابزارهایی مثل Unity Collaborate عالی هستن، ولی گیت استاندارد جهانی توسعه‌ست. شما باید مهارتی رو یاد بگیری که همه‌جا کاربرد داشته باشه، نه ابزاری که فقط به یک پلتفرم خاص وابسته است.

2️⃣ نگه‌داری پروژه با فلش و کپی کردن فولدر، نشانه‌ی ضعف در سازمان‌دهی و نداشتن مهارت ورژن کنترله. گیت از نظر فضا و امنیت بسیار بهینه‌تره و هیچ سیستم دستی‌ای جای اون رو نمی‌گیره.

📌 و مهم‌تر از همه:

▪️ یادگیری گیت یعنی آماده شدن برای دنیای واقعی توسعه نرم‌افزار.
▪️ یادگیری گیت یعنی احترام به زمان و زحمتی که برای پروژه‌ت می‌کشی.
▪️ یادگیری گیت یعنی برداشتن اولین قدم برای حرفه‌ای شدن.

🔥 اگه هنوز از گیت استفاده نمی‌کنی، همین امروز اولین ریپازیتوری رو برای پروژه‌ت بساز.
مطمئن باش آینده‌ی خودت ازت تشکر می‌کنه.

#یونیتی #برنامه_نویسی #ورژن_کنترل
#Unity #Git #VersionControl
🔥11👍2👏1
💡کدام API گرافیکی؟ مقایسه OpenGL، DirectX و Vulkan

اصلا API گرافیکی چیه؟
رابط نرم‌افزاری (API – Application Programming Interface) گرافیکی، در واقع یه «پل ارتباطی» بین بازی/برنامه و کارت گرافیک (GPU) هست.

به زبان ساده: بازی‌ت مستقیما با سخت‌افزار حرف نمی‌زنه؛ بلکه از طریق این واسطه دستور می‌ده.

بازی → API گرافیکی → درایور کارت گرافیک → GPU
این باعث میشه توسعه‌دهنده نیازی به درگیری مستقیم با جزئیات سخت‌افزار نداشته باشه و فقط با دستورهای استاندارد کار کنه.


🎮مقایسه APIهای گرافیکی:

1️⃣ اوپن‌جی‌ال (OpenGL): قدیمی اما کارآمد
وضعیت: API قدیمی و سطح بالا (High-Level).
مدیریت: برای توسعه‌دهنده آسون‌تره، اما بهینگی کمتری داره.
کارکرد: بیشتر کار روی دوش CPU می‌افته و همین باعث میشه
پرفورمنس کمتری داشته باشه.

2️⃣ دایرکت‌اکس (DirectX): سلطان ویندوز
وضعیت: مخصوص مایکروسافت (ویندوز و Xbox).
نسخه جدید: DX12 یه API سطح پایین (Low-Level) و
شبیه Vulkan عمل می‌کنه.
کارکرد: مدیریت عالی CPU و GPU، فریم‌ریت بالاتر رو تضمین
می‌کنه. اما فقط روی پلتفرم‌های مایکروسافت کار می‌کنه.

3️⃣ وولکان (Vulkan): آینده در دستان توست!
وضعیت: API سطح پایین (Low-Level) و
کراس‌پلتفرم (Cross-Platform).
مدیریت: به GPU دسترسی مستقیم میده و
سربار (Overhead) CPU رو شدیدا کاهش میده.
کارکرد: از قابلیت چندنخی (Multithreading) واقعی بهره
می‌بره و از CPUهای چند هسته‌ای بهترین استفاده رو می‌کنه.
نکته: برای بازی‌ها و اپلیکیشن‌های سنگین گرافیکی بهترین
انتخابه!


🕹استفاده از Vulkan/OpenGL/DirectX توی یونیتی

چطور انتخابش کنیم؟
مرحله اول: توی Project Settings، بخش Graphics
یا Player، رندررهای مختلف رو می‌تونی انتخاب کنی.
● مثال
: روی ویندوز، می‌تونی DirectX 11, DirectX 12,
و OpenGLCore
یا Vulkan رو انتخاب کنی. روی اندروید
معمولا OpenGL ES یا Vulkan و روی iOS هم Metal
یا OpenGL ES انتخاب میشه.

مرحله دوم: هنگام گرفتن بیلد (Build)، پلتفرم رو انتخاب کن.
تنظیمات: تیک گزینه "Auto Graphics API" رو بردار تا بتونی
به صورت دستی API مورد نظرت رو انتخاب کنی.

یونیتی خودش مترجمه!
بی‌نیاز از کدنویسی مستقیم: توی کد C# یا Shaderها، لازم
نیست مستقیما Vulkan یا DirectX رو صدا بزنی.
● کار یونیتی
: APIهای یونیتی خودشون دستورها رو به رندرری که
انتخاب کردی ترجمه می‌کنن. کارت رو راحت کرده!

نکته حرفه‌ای:
● پس Vulkan یا OpenGL؟: استفاده از Vulkan به
جای OpenGL روی سخت‌افزارهای جدید، فریم‌ریت بالاتری
بهت میده چون بهینه‌تر از CPU استفاده می‌کنه.
هشدار: ولی حواست باشه! ممکنه روی سخت‌افزارهای خیلی
قدیمی یا کارت‌های گرافیک ضعیف، Vulkan مشکل‌ساز بشه و
باعث کرش یا افت فریم بشه.


خلاصه و مفید:
اوپن‌جی‌ال: ساده، اما کُند.
دایرکت‌اکس: سریع، اما فقط برای ویندوز.
وولکان: سریع، چندپلتفرمه، اما نیاز به مدیریت دقیق‌تر داره.


#یونیتی #برنامه_نویسی #گرافیک
#Vulkan #OpenGL #DirectX #Unity
10❤‍🔥2👏1
💡 فضای رنگی در یونیتی: Gamma و Linear — چی هستن و چطور تغییرشون بدیم؟

🔹 گاما (Gamma)

● روش پیش‌فرض نمایش رنگ در اکثر نمایشگرها.
● روشنایی‌ها به شکل غیرخطی نمایش داده می‌شن، یعنی چشم انسان تفاوت‌ها رو بهتر می‌بینه.
● مناسب پروژه‌هایی با سبک کارتونی، فانتزی یا غیرواقع‌گرایانه.

🔹 خطی (Linear)

● روشنایی‌ها به شکل خطی محاسبه می‌شن و نتیجه طبیعی‌تر و واقع‌گرایانه‌تره.
● برای نورپردازی دقیق، سایه‌ها و بازتاب‌ها توصیه می‌شه.
● مناسب پروژه‌هایی با سبک واقع‌گرایانه، سینمایی یا شبیه‌سازی.


🧩 چطور Gamma و Linear رو در یونیتی تغییر بدیم؟

1️⃣ وارد منوی Edit > Project Settings > Player بشید.
2️⃣ بخش Other Settings رو پیدا کنید.
3️⃣ گزینه Color Space رو به Gamma یا Linear تغییر بدید.

💡 نکته:

● برای سبک‌های فانتزی و غیرواقع‌گرایانه: Gamma.
● برای سبک‌های واقع‌گرایانه و سینمایی: Linear.


⚡️ چرا این موضوع مهمه؟

● کیفیت نورپردازی و بازتاب‌ها رو تحت تاثیر قرار می‌ده.
● باعث می‌شه بازی شما طبیعی‌تر دیده بشه و سبک پروژه بهتر منتقل بشه.

#یونیتی
#Unity #ColorSpace
10👍32
🎨 رندر پایپ‌لاین در یونیتی چیه و چه کاربردی داره؟

وقتی توی یونیتی یه صحنه سه‌بعدی می‌سازیم، چیزی که در نهایت روی صفحه نمایش می‌بینیم حاصل یه فرآیند چندمرحله‌ایه به اسم Render Pipeline.
به زبان ساده: رندر پایپ‌لاین همون "خط لوله پردازش تصویر" یونیتی هست که مشخص می‌کنه مدل‌ها، نورها، افکت‌ها و متریال‌ها چطور پردازش و روی صفحه کشیده بشن.

یونیتی برای نیازهای مختلف ۳ رندر پایپ‌لاین اصلی داره:



پیش‌فرض: 🔹 Built-in Render Pipeline (کلاسیک)


● همون رندر پایپ‌لاین پیش‌فرض و قدیمی یونیتی.
● ساده، قابل استفاده برای اکثر پروژه‌ها و نیاز به تنظیمات خاص نداره.
● محدودیت: انعطاف کمی در گرافیک‌های خیلی پیشرفته داره و بهینه‌سازی به صورت دستی سخت‌تره.
● مناسب برای پروژه‌های کوچک و متوسط، موبایل، و کسایی که نمی‌خوان زیاد درگیر گرافیک پیچیده بشن.


سبک: 🔹 Universal Render Pipeline (URP)


● قبلاً به اسم LWRP (Lightweight RP) شناخته می‌شد.
● هدفش اینه که روی پلتفرم‌های مختلف (موبایل، کنسول، PC) یه تعادل بین کیفیت و کارایی بده.
● امکاناتش شامل: شیدرهای مدرن، نورپردازی بهتر، Post Processing داخلی، و مدیریت بهتر منابع.
● مناسب برای بیشتر بازی‌های امروزی، مخصوصاً اگه بخوای هم روی موبایل و هم روی کنسول/PC منتشر کنی.


پیشرفته: 🔹 High Definition Render Pipeline (HDRP)


● برای پروژه‌های با کیفیت بالا (AAA) ساخته شده.
● تمرکز روی واقع‌گرایی گرافیکی: نورپردازی فیزیک‌محور (PBR)، انعکاس‌های دقیق، Volumetric Lighting، سایه‌های پیشرفته، Ray Tracing.
● نیاز به سخت‌افزار قوی‌تر داره و بیشتر برای PC و کنسول‌های نسل جدید استفاده میشه.
● اگه هدفت گرافیک خفن و نزدیک به واقعیت باشه، HDRP بهترین گزینه‌ست.


رندر پایپ‌لاین سفارشی (Custom SRP)


یونیتی یه قابلیت فوق‌العاده به اسم Scriptable Render Pipeline (SRP) داره.
یعنی بدون اینکه سورس انجین یونیتی رو دستکاری کنی، می‌تونی پایپ‌لاین رندر اختصاصی خودت رو بسازی.
با C# و Shader Graph میشه کنترل کرد که:

● صحنه چطور رندر بشه،
● ترتیب پردازش نور و سایه چطور باشه،
● چه افکت‌ها یا تکنیک‌های خاصی استفاده بشن.

این ویژگی بیشتر به درد تیم‌های حرفه‌ای یا استودیوهایی می‌خوره که می‌خوان استایل بصری خاص خودشون رو داشته باشن (مثلاً بازی‌های سبک سل‌شید، یا موتورهای بهینه‌شده برای سبک هنری خاص).

#یونیتی #رندرپایپ‌لاین #گرافیک_بازی
#Unity #RenderPipeline #URP #HDRP #SRP
63