| کانال توسعه‌دهندگان بازی | – Telegram
| کانال توسعه‌دهندگان بازی |
408 subscribers
3 photos
6 links
⭕️ کانال توسعه‌دهندگان بازی دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
🎮 بازی‌سازی: دنیایی از خلاقیت و تکنولوژی!

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

🎮 انجین‌های محبوب بازی‌سازی

🎮 یونیتی (Unity)
یکی از محبوب‌ترین و پرکاربردترین انجین‌های بازی‌سازی در جهان است. یونیتی از 2D و 3D پشتیبانی می‌کند و برای ساخت بازی‌های موبایل، کنسول، و حتی واقعیت مجازی مناسب است.

🔵پشتیبانی از پلتفرم‌های مختلف مثل Android، iOS، PC و کنسول‌ها
🔵کتابخانه عظیمی از ابزارها و پلاگین‌ها
🔵مناسب برای توسعه‌دهندگان مستقل و استودیوهای بزرگ

🎮 آنریل انجین (Unreal Engine)
اگر به دنبال ایجاد بازی‌های با کیفیت گرافیکی بالا هستید، آنریل انجین بهترین انتخاب است. این انجین با موتور گرافیکی قدرتمند خود، برای ساخت بازی‌های AAA و تجربه‌های واقعیت مجازی بسیار مورد استفاده قرار می‌گیرد.

🔵گرافیک بی‌نظیر با استفاده از Unreal Engine 5
🔵مناسب برای بازی‌های AAA
🔵پشتیبانی از Blueprints که امکان برنامه‌نویسی بدون نیاز به کدنویسی را فراهم می‌کند

👁 کرای انجین (CryEngine)
کرای انجین نیز برای ساخت بازی‌هایی با کیفیت بصری بالا شناخته شده است. این انجین برای ساخت بازی‌های اول شخص و تجربه‌های محیطی بزرگ بسیار مناسب است.

🔵ابزارهای پیشرفته برای طراحی گرافیکی
🔵مناسب برای بازی‌های جهان‌باز (Open World)

🖼️ کانستراکت (Construct)
اگر تازه‌کار هستید و به دنبال یک ابزار ساده برای شروع ساخت بازی‌های 2D هستید، کانستراکت انتخاب بسیار خوبی است. این انجین بدون نیاز به کدنویسی امکان ساخت بازی‌های ساده و جذاب را فراهم می‌کند.

🔵مناسب برای توسعه‌دهندگان مبتدی
🔵محیط کاربری ساده و بدون نیاز به کدنویسی
🔵مناسب برای ساخت بازی‌های موبایل و وب

⚙️ گودو (Godot)
گودو یک انجین متن‌باز و سبک است که به شما اجازه می‌دهد بازی‌های 2D و 3D بسازید. این انجین به دلیل سادگی و جامعه فعال توسعه‌دهندگان، به سرعت در حال محبوبیت است.

🔵متن‌باز و کاملاً رایگان
🔵پشتیبانی از زبان‌های مختلف برنامه‌نویسی مثل C# و GDScript
🔵مناسب برای پروژه‌های کوچک و متوسط

چطور انجین مناسب را انتخاب کنیم؟
🧐
انتخاب انجین بازی‌سازی به نیازها و اهداف شما بستگی دارد. اگر به دنبال یک پروژه بزرگ و پیچیده هستید، انجین‌هایی مثل آنریل انجین یا کرای انجین بهترین گزینه‌ها هستند. اما اگر تازه‌کار هستید یا به دنبال ساخت بازی‌های ساده هستید، یونیتی، کانستراکت و گودو انتخاب‌های مناسبی هستند.

💎 Channel: @DevelopixGame
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41👍1
🔻کاربرد تابع Clamp (محدودکننده) در بازی‌سازی:
این تابع یه ابزار خیلی کاربردی تو برنامه‌نویسی بازی‌هاست. فرض کنین می‌خوایین یه مقدار عددی رو بین دو عدد مشخص محدود کنین، مثلاً سرعت یه شخصیت رو بین صفر تا صد کیلومتر بر ساعت نگه دارین. اینجاست که تابع Clamp به کارمون میاد.

چطوری کار می‌کنه؟
تابع Clamp سه تا ورودی می‌گیره:

‏x‏: مقداری که می‌خوایم محدودش کنیم.
‏min: کمترین مقدار مجاز.
‏max: بیشترین مقدار مجاز.

تابع به این صورت عمل می‌کنه:

اگر x از min کوچکتر بود، min رو برمی‌گردونه.
اگر x بین min و max بود، خود x رو برمی‌گردونه.
اگر x از max بزرگتر بود، max رو برمی‌گردونه.

مثال‌های ساده:
- محدود کردن سرعت: فرض کنین سرعت یه ماشین رو با متغیر speed نشون می‌دیم. با استفاده از تابع Clamp می‌تونیم سرعت رو بین صفر تا دویست کیلومتر بر ساعت محدود کنیم:
speed = Clamp(speed, 0, 200);
- محدود کردن موقعیت یک شیء: فرض کنین می‌خوایم یه توپ رو توی صفحه بازی نگه داریم. با استفاده از Clamp می‌تونیم موقعیت افقی و عمودی توپ رو بین صفر تا اندازه صفحه محدود کنیم.
- محدود کردن مقدار سلامتی یک شخصیت.
- محدود کردن زاویه چرخش یک دوربین.
- محدود کردن مقدار نورپردازی.

پیاده‌سازی تابع Clamp: می‌تونین به‌راحتی این تابع رو به‌صورت یک تابع سفارشی در زبان برنامه‌نویسی خودتون پیاده‌سازی کنین. همچنین بسیاری از کتابخانه‌های گرافیکی مثل Unity و Unreal Engine تابع Clamp رو به‌صورت پیش‌ساخته ارائه می‌دهند.

درنهایت، تابع Clamp یه راه کاملا مناسب برای کنترل مقادیر عددی در بازی‌هاست. با درک نحوه کار این تابع و توابع این‌چنینی می‌تونین بازی‌های بهتری بسازین.

🔖#GameDev, #بازیسازی, #Math

👤 Mahdiyar

💎 Channel: @DevelopixGame
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🌟 آشنایی با پیش‌ساخته (Prefab) در یونیتی 🎮

پیش‌ساخته (Prefab) یکی از امکانات قدرتمند یونیتی است که به شما این امکان را می‌دهد تا اشیاء را به‌راحتی مدیریت و استفاده کنید. در این پست به بررسی ویژگی‌های آن می‌پردازیم.

با استفاده از Prefab، می‌توانید یک مدل، کاراکتر، یا هر شیء دیگری را ایجاد کرده و در پروژه خود به‌صورت چندین بار استفاده کنید. این ویژگی به‌ویژه در پروژه‌های بزرگ بسیار مفید است، زیرا به شما کمک می‌کند که کارهای تکراری را کاهش دهید و بهره‌وری خود را افزایش دهید.

📌 کاربردهای Prefabs:

- تکرارپذیری: با یک بار طراحی یک شیء، می‌توانید آن را به‌راحتی در صحنه‌های مختلف تکرار کنید. به عنوان مثال، اگر یک درخت را به عنوان Prefab بسازید، می‌توانید از آن در مکان‌های مختلف صحنه استفاده کنید.
- مدیریت آسان: تغییرات را می‌توانید بر روی یک Prefab اعمال کنید و این تغییرات به تمام نسخه‌های آن در صحنه‌ها منتقل می‌شود. برای مثال، اگر بخواهید رنگ یک شخصیت را تغییر دهید، فقط کافی است رنگ Prefab را تغییر دهید و تمام نسخه‌های آن به‌روز خواهند شد.
- کاهش اندازه پروژه: با استفاده از Prefabs، نیاز به ذخیره‌سازی مجدد هر شیء در پروژه کاهش می‌یابد. این به معنای سازماندهی بهتر و بهینه‌تر پروژه شماست.

✍️ چگونه یک Prefab بسازیم؟

1. ایجاد شیء:
- یک شیء جدید (مثل Cube یا Sphere) را در صحنه خود ایجاد کنید. برای مثال، می‌توانید یک "Cube" ساده را در نظر بگیرید.

2. ایجاد Prefab:
- شیء را از Hierarchy به پوشه Assets بکشید. این کار باعث می‌شود که یک Prefab جدید ایجاد شود. حالا می‌توانید این Prefab را در هر صحنه‌ای که می‌خواهید استفاده کنید.

3. استفاده از Prefab:
- حالا می‌توانید Prefab را از پوشه Assets به صحنه‌های مختلف بکشید و از آن استفاده کنید. به‌راحتی می‌توانید چندین نسخه از یک Prefab در صحنه‌های مختلف داشته باشید.

📝 نکات مهم:
- با تغییر Prefab در پوشه `Assets`، تمام نسخه‌های آن در صحنه‌ها به‌روزرسانی می‌شوند، بنابراین برای حفظ یکپارچگی طراحی، حتماً از این ویژگی بهره‌مند شوید.
- می‌توانید از Prefabs برای ایجاد شخصیت‌های قابل کنترل، دشمنان، و حتی محیط‌های مختلف استفاده کنید. مثلاً یک Prefab می‌تواند به عنوان یک دشمن در بازی عمل کند که در مکان‌های مختلف قرار می‌گیرد.

🔖 #GameDev, #بازیسازی

👤 ali reza

💎 Channel: @DevelopixGame
🔥5
🌀 متدهای کلاس Rigidbody در یونیتی: مدیریت فیزیک و حرکت اشیاء

کلاس Rigidbody در یونیتی به شما این امکان را می‌دهد که فیزیک و حرکت اشیاء را به راحتی کنترل کنید. در این پست، برخی از مهم‌ترین متدهای این کلاس را با توضیحات مختصر و مثال‌های کاربردی بررسی می‌کنیم.

افزودن نیرو (AddForce)
افزودن یک نیرو به Rigidbody برای ایجاد حرکت. این متد به شما این امکان را می‌دهد که جسم را با نیرویی مشخص در یک جهت حرکت دهید.

void Update()
{
Rigidbody rb = GetComponent<Rigidbody>();
if (Input.GetKey(KeyCode.W))
{
rb.AddForce(Vector3.forward * 10); // حرکت به جلو
}
}


افزودن گشتاور (AddTorque)
افزودن گشتاور به Rigidbody برای چرخش آن. این متد به شما این امکان را می‌دهد که جسم را حول محور خاصی بچرخانید.

void Update()
{
Rigidbody rb = GetComponent<Rigidbody>();
if (Input.GetKey(KeyCode.A))
{
rb.AddTorque(Vector3.up * 10); // چرخش به سمت بالا
}
}


حرکت به موقعیت (MovePosition)
حرکت Rigidbody به یک موقعیت جدید به صورت مستقیم. این متد به شما اجازه می‌دهد جسم را به یک موقعیت خاص بدون نیاز به اعمال نیرو جابجا کنید.

void FixedUpdate()
{
Rigidbody rb = GetComponent<Rigidbody>();
Vector3 targetPosition = transform.position + Vector3.forward * Time.deltaTime;
rb.MovePosition(targetPosition); // حرکت به موقعیت جدید
}


چرخش به زاویه (MoveRotation)
چرخش Rigidbody به یک زاویه جدید. این متد به شما اجازه می‌دهد جسم را به صورت مستقیم به زاویه‌ای مشخص بچرخانید.

void FixedUpdate()
{
Rigidbody rb = GetComponent<Rigidbody>();
Quaternion targetRotation = Quaternion.Euler(0, 90, 0);
rb.MoveRotation(targetRotation); // چرخش به زاویه مشخص
}


به خواب رفتن (Sleep)
متد Sleep جسم را به حالت خواب می‌برد. در این حالت، جسم دیگر تحت تأثیر نیروهای فیزیکی قرار نمی‌گیرد و محاسبات فیزیکی برای آن متوقف می‌شود.

void Update()
{
Rigidbody rb = GetComponent<Rigidbody>();
if (Input.GetKey(KeyCode.S))
{
rb.Sleep(); // به خواب رفتن
}
}


بیدار شدن (WakeUp)
متد WakeUp جسم را بیدار می‌کند و شبیه‌سازی فیزیکی برای آن دوباره فعال می‌شود. این متد باعث می‌شود که جسم مجدداً تحت تأثیر نیروهای فیزیکی قرار بگیرد.

void Update()
{
Rigidbody rb = GetComponent<Rigidbody>();
if (Input.GetKey(KeyCode.W))
{
rb.WakeUp(); // بیدار شدن
}
}


حالت کینماتیک (isKinematic)
با تنظیم isKinematic به true، شما می‌توانید از تأثیرات فیزیکی بر روی جسم جلوگیری کنید. این حالت برای اشیائی که باید به صورت دستی کنترل شوند مفید است.

void Start()
{
Rigidbody rb = GetComponent<Rigidbody>();
rb.isKinematic = true; // جلوگیری از تأثیرات فیزیکی
}


بررسی برخورد (CheckCollision)
با این متد می‌توانید بررسی کنید که آیا دو جسم با هم برخورد دارند یا خیر. این متد می‌تواند در مدیریت برخوردها بسیار مفید باشد.

void Update()
{
Rigidbody rb = GetComponent<Rigidbody>();
if (Physics.CheckSphere(transform.position, 1.0f))
{
Debug.Log("Collision detected!"); // برخورد شناسایی شد
}
}


این متدها به شما در مدیریت فیزیک و حرکت اشیاء کمک می‌کنند و می‌توانند تجربه بازی شما را بهبود ببخشند.

🔖 #GameDev, #بازیسازی

👤 ali reza

💎 Channel: @DevelopixGame
5🔥2👍1
🎶 مدیریت صدا با AudioSource در یونیتی: افزودن صدا به بازی + شبیه‌سازی صدای موتور ماشین

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

۱. اضافه کردن AudioSource به شیء
ابتدا به شیء مورد نظر در صحنه AudioSource اضافه کنید:
- شیء مورد نظر را انتخاب کنید.
- به منوی Add Component بروید و AudioSource را اضافه کنید.

۲. انتخاب فایل صوتی
برای پخش صدا، به یک Audio Clip نیاز دارید. فایل صوتی خود را به قسمت AudioClip در AudioSource اختصاص دهید. فایل‌های صوتی باید در فرمت‌های پشتیبانی‌شده یونیتی مانند WAV یا MP3 باشند.

۳. پخش و توقف صدا (Play و Stop)
با استفاده از متدهای Play و Stop می‌توانید صدا را کنترل کنید.

AudioSource audioSource;

void Start()
{
audioSource = GetComponent<AudioSource>();
}

void Update()
{
if (Input.GetKeyDown(KeyCode.P))
{
audioSource.Play(); // شروع پخش صدا
}
if (Input.GetKeyDown(KeyCode.S))
{
audioSource.Stop(); // توقف صدا
}
}


۴. تنظیم بلندی صدا
برای کنترل بلندی صدا، مقدار Volume را تغییر دهید:

audioSource.volume = 0.5f; // تنظیم صدا به ۵۰٪


۵. پخش تکراری (Loop)
با فعال کردن گزینه Loop می‌توانید صدا را به صورت تکراری پخش کنید.

audioSource.loop = true; // تنظیم برای پخش تکراری


۶. شبیه‌سازی صدای موتور ماشین 🚗
برای بازی‌های ماشینی، می‌توانید صدای موتور ماشین را با استفاده از تغییر Pitch (گام) صدا بر اساس سرعت شبیه‌سازی کنید. فرض کنیم که متغیر speed سرعت ماشین را نشان می‌دهد. با تغییر `pitch`، صدای موتور واقعی‌تر خواهد شد.

public class CarSound : MonoBehaviour
{
public AudioSource engineSound;
public float speed;

void Update()
{
// فرض می‌کنیم سرعت ماشین بین 0 و 100 واحد است
// تنظیم pitch بر اساس سرعت ماشین
engineSound.pitch = 1.0f + (speed / 100); // افزایش pitch با افزایش سرعت
}
}


۷. پخش با تأخیر (PlayDelayed)
برای پخش صدا با تأخیر، از PlayDelayed استفاده کنید:

audioSource.PlayDelayed(2.0f); // پخش صدا با دو ثانیه تأخیر


---

این روش‌ها و مثال‌ها به شما کمک می‌کنند تا صداهای بازی خود را به شکل واقع‌گرایانه و با کنترل‌های پیشرفته مدیریت کنید.

🔖 #GameDev, #بازیسازی

👤 ali reza

💎 Channel: @DevelopixGame
5
💡 نورپردازی در یونیتی و انواع آن

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

---

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 می‌تواند بر عملکرد بازی تأثیر بگذارد، پس فقط در جاهای ضروری استفاده کنید.

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

🔖 #GameDev, #بازیسازی

👤 ali reza

💎 Channel: @DevelopixGame
🔥31👍1
🕹 متدهای برخورد در یونیتی 🕹

متدهای برخورد یا Collision و Trigger ابزارهای بسیار مهمی برای مدیریت تعاملات فیزیکی بین اشیاء در بازی هستند. این متدها به شما امکان می‌دهند که واکنش‌های خاصی را هنگام وقوع برخوردها یا ورود به محدوده‌ی راه‌انداز تعریف کنید. 🌟

---

1️⃣ ورود به محدوده راه‌انداز - OnTriggerEnter

- توضیح: این متد وقتی فراخوانی می‌شود که یک شیء وارد محدوده‌ی راه‌انداز شود.
- نمونه کد:

  void OnTriggerEnter(Collider other)
{
Debug.Log("شیء وارد محدوده‌ی راه‌انداز شد: " + other.name);
}


📌 کاربرد: مناسب برای ایجاد رویدادهایی مانند باز کردن درها، فعال کردن تله‌ها و موارد مشابه.

---

2️⃣ باقی ماندن در محدوده راه‌انداز - OnTriggerStay
- توضیح: این متد به صورت پیوسته در هر فریم، تا زمانی که شیء در محدوده‌ی راه‌انداز باقی بماند، فراخوانی می‌شود.
- نمونه کد:

  void OnTriggerStay(Collider other)
{
Debug.Log("شیء هنوز در محدوده‌ی راه‌انداز است: " + other.name);
}


📌 کاربرد: مناسب برای اعمال اثرات پیوسته مثل کاهش سلامتی یا اعمال نیرو.

---

3️⃣ خروج از محدوده راه‌انداز - OnTriggerExit
- توضیح: وقتی شیء از محدوده‌ی راه‌انداز خارج می‌شود، این متد فراخوانی می‌شود.
- نمونه کد:

  void OnTriggerExit(Collider other)
{
Debug.Log("شیء از محدوده‌ی راه‌انداز خارج شد: " + other.name);
}


📌 کاربرد: متوقف کردن اثرات خاص یا اعلام خروج اشیاء.

---

4️⃣ آغاز برخورد فیزیکی - OnCollisionEnter
- توضیح: وقتی یک برخورد فیزیکی بین دو شیء رخ دهد، این متد فراخوانی می‌شود.
- نمونه کد:

  void OnCollisionEnter(Collision collision)
{
Debug.Log("برخورد فیزیکی با: " + collision.gameObject.name);
}


📌 کاربرد: شبیه‌سازی تخریب، ایجاد اثرات فیزیکی و غیره.

---

5️⃣ ادامه برخورد فیزیکی - OnCollisionStay
- توضیح: وقتی برخورد ادامه‌دار باشد، این متد به صورت پیوسته فراخوانی می‌شود.
- نمونه کد:

  void OnCollisionStay(Collision collision)
{
Debug.Log("هنوز در حال برخورد با: " + collision.gameObject.name);
}


📌 کاربرد: تأثیرات مداوم در طول برخورد.

---

6️⃣ پایان برخورد فیزیکی - OnCollisionExit
- توضیح: وقتی اشیاء از حالت برخورد خارج می‌شوند، این متد فراخوانی می‌شود.
- نمونه کد:

  void OnCollisionExit(Collision collision)
{
Debug.Log("پایان برخورد با: " + collision.gameObject.name);
}


📌 کاربرد: توقف اثرات برخورد.

---

🎮 تفاوت بین Collision و Trigger
- برای بررسی ورود، ماندن و خروج از محدوده، بدون شبیه‌سازی برخورد فیزیکی از Trigger استفاده می‌شود.
- برای شبیه‌سازی برخورد فیزیکی واقعی از Collision
استفاده می‌شود.

🔖 #GameDev, #بازیسازی

👤 ali reza

💎 Channel: @DevelopixGame
👍4
🔸 این‌روز‌ها با این قطعی برق‌های ناگهانی، احتمالا براتون پیش‌اومده که پیش‌رفتِ کارتون رو سیو نکرده باشید و زحماتتون با قطع شدن برق به‌هدر بره. اگر از یونیتی استفاده می‌کنید این پکیج می‌تونه توی این موقعیت‌ها نجات‌دهنده باشه:

🔗 Asset Store

🔖 #GameDev, #بازیسازی, #Unity, #یونیتی

👤 Mahdiyar

💎 Channel: @DevelopixGame
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Forwarded from Developix Support
🦾 زور بازوت رو نشون بده و جایزه ببر!
💰 یه مسابقه ۱۰۰ میلیون تومنی برای ساخت بازو (بات) و مینی‌اپ در اپلیکیشن بله

🎯 از استعدادت پول در بیار!
چطوری؟
بله با مسابقهٔ «زور بازوت رو نشون بده!» یک فرصت عالی برای مهندسین نرم‌افزار، وب دولوپر‌ها، صاحبان سایت‌ها و اپلیکیشن‌ها و تیم‌های محصول فراهم کرده که پاسخگوی این دغدغه‌هاست.

🎁 یه مسابقه با ۱۰۰ میلیون تومن جایزهٔ نقدی و ۱ میلیارد تومن اعتبار تبلیغات منتظرته! ♨️

📎همین الان در مسابقه
ثبت‌نام کن! ➡️

💬
کانال اخبار بازو دراپلیکیشن بله
کانال اطلاع‌رسانی بله | @BaleMessenger
📢 بهینه‌سازی پردازش‌ها در یونیتی با HPC#

🔹 در یونیتی، HPC# (High-Performance C#) یک نسخه بهینه‌شده از سی‌شارپ است که برای پردازش‌های سنگین و عملکرد بالا طراحی شده. این تکنولوژی با Burst Compiler و Job System ترکیب می‌شود تا بیشترین بهره را از CPU بگیرد. 🚀

💡 چرا باید از HPC# استفاده کنیم؟
سرعت: افزایش عملکرد در حد C++
موازی‌سازی: پردازش چندوظیفه‌ای با Job System
حافظه: کاهش مصرف رم و جلوگیری از Garbage Collection
بهینه‌سازی: مدیریت دستی حافظه با Native Containers

🔍 نیتیو کانتینرها (Native Containers) چیست و چرا اهمیت دارند؟
🛠 تعریف: Native Containers مجموعه‌ای از ساختارهای داده‌ای مانند NativeArray, NativeList, NativeQueue هستند که به جای مدیریت حافظه توسط Garbage Collector (GC)، حافظه را به‌طور دستی و مستقیم مدیریت می‌کنند.

⚡️ مزایا:

🔹 کاهش GC Alloc و Garbage Collection → حذف توقف‌های ناگهانی (Lag Spikes)
🔹 دسترسی مستقیم به حافظه → سرعت پردازش بالاتر بدون تأخیر
🔹 حافظه کش‌پسند (Cache-Friendly Layout) → افزایش کارایی CPU

🚀 چرا نیتیو کانتینرها سریع‌ترند؟
💡 پردازش: حافظه رم دارای Cache Line است که داده‌ها را برای پردازش سریع نگه می‌دارد. ساختارهای سنتی مثل List<T> داده‌ها را پراکنده در حافظه (Heap Allocation) ذخیره می‌کنند، اما Native Containers داده‌ها را پیوسته نگه می‌دارند (Stack/Native Heap Allocation).

نتیجه:
- پردازنده می‌تواند داده‌های مورد نیاز را در یک مرحله (Memory Fetch) بارگذاری کند.
- دیگر نیازی به چندین بار خواندن حافظه اصلی نیست که باعث کاهش سرعت اجرا می‌شود.

🎯 چگونه HPC# به بهینه‌سازی بازی‌ها کمک می‌کند؟
🎮 بازی‌های سنگین: مناسب برای شبیه‌سازی‌های پیچیده مانند فیزیک و هوش مصنوعی
📈 افزایش FPS: کاهش لگ و افزایش نرخ فریم در پروژه‌های سنگین
🧠 مدیریت هوشمندانه حافظه: اجرای پردازش‌های چندنخی (Multithreading) و کنترل بهتر CPU

🔥 اگر می‌خواهید بازی‌تون سریع‌تر، بهینه‌تر و بدون لگ اجرا بشه، HPC# و Native Containers رو جدی بگیرید! 🚀

🔖 #GameDev, #بازیسازی

👤 ali reza

💎 Channel: @DevelopixGame
🔥4
🎯 آشنایی با Platform-Specific Code توی یونیتی

خیلی وقتا توی توسعه‌ی بازی‌هات ممکنه بخوای برای هر پلتفرم یه رفتار خاص بنویسی. مثلا یه کدی فقط روی سرور اجرا شه، یا یه بخش فقط برای WebGL فعال باشه. اینجاست که Platform-Specific Code به دادمون می‌رسه!

یونیتی یه سری پیش‌پردازنده (Preprocessor Directive) داره که باهاشون می‌تونی دقیقا مشخص کنی کد برای چه پلتفرمی اجرا بشه.

🔧 مثال کاربردی:

void Start()
{
#if UNITY_SERVER
Debug.Log("این کد فقط در سرور اجرا می‌شود.");
StartServer();

#elif UNITY_WEBGL
Debug.Log("این کد فقط در WebGL اجرا می‌شود.");
ConnectToServer();

#elif UNITY_ANDROID
Debug.Log("این کد فقط در اندروید اجرا می‌شود.");

#else
Debug.Log("این کد در سایر پلتفرم‌ها اجرا می‌شود.");
#endif
}


🔨 حالت خاص - کدهای مخصوص ادیتور:

گاهی وقتا یه سری کد نوشتی که فقط توی محیط ادیتور لازمه، مثلا تول ساختی یا با آبجکت‌ها توی Scene ور می‌ری. این کدها اگه توی خروجی برن، نه‌تنها به درد نمی‌خورن، بلکه باعث خطای کامپایل یا خروجی نگرفتن هم می‌شن. برای جلوگیری از این مورد از #if UNITY_EDITOR استفاده کن:

#if UNITY_EDITOR
using UnityEngine;

public class EditorOnlyExample : MonoBehaviour
{
void OnGUI()
{
// فقط در محیط ادیتور اجرا میشه، توی خروجی نمی‌ره
if (GUILayout.Button("Test"))
{
Debug.Log("این فقط مخصوص ادیتوره");
}
}
}
#endif


اینجوری هم پروژه‌ت تمیز می‌مونه، هم مطمئن می‌شی هیچ کد ادیتوری وارد خروجی نهایی نمی‌شه.

---

💡 کاربردهای مهم:
- جدا کردن کدهای مربوط به سرور و کلاینت
- مدیریت ورودی‌ها برای موبایل یا پی‌سی
- استفاده از API خاص هر پلتفرم
- جلوگیری از ورود کدهای ادیتور به خروجی بازی
- بهینه‌سازی عملکرد برای هر پلتفرم


📌 لیست پرکاربردترین دستورهای Platform-Specific در یونیتی:

- UNITY_EDITOR
فقط موقعی که پروژه توی محیط ادیتور یونیتی اجرا می‌شه فعاله (نه تو خروجی نهایی).

- UNITY_ANDROID
مخصوص زمانی که بازی روی دستگاه‌های اندروید اجرا می‌شه.

- UNITY_IOS
مربوط به اجرای بازی روی آیفون یا آیپد (iOS).

- UNITY_WEBGL
وقتی بازی روی مرورگر (WebGL) اجرا می‌شه، این شرط فعاله.

- UNITY_STANDALONE_WIN
مخصوص خروجی‌های ویندوز (PC) هست؛ چه بازی رو مستقیم از فایل EXE اجرا کنی چه از ادیتور.

- UNITY_SERVER
زمانی فعاله که خروجی با گزینه‌ی Server Build گرفته شده باشه (مثلاً برای اجرای بازی سمت سرور).

- DEVELOPMENT_BUILD
فقط تو بیلدهای توسعه‌ای فعال می‌شه؛ موقعی که تیک Development Build رو توی تنظیمات خروجی بزنی (برای دیباگ و لاگ‌گیری بیشتر).

🧠 نکته مهم: این شرط‌ها فقط موقع کامپایل بررسی می‌شن. پس توی Update یا منطق‌های زمان اجرا ازشون استفاده نمی‌شه. برای اون موارد باید از Application.platform استفاده کنی.

🔖 #GameDev, #بازیسازی

👤 ali reza

💎 Channel: @DevelopixGame
🔥6👍2
اهمیت Assemblies در پروژه‌های یونیتی

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

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

چرا باید از Assemblies استفاده کنیم؟
1. بهینه‌سازی زمان کامپایل: وقتی پروژه شما بزرگ می‌شود، یونیتی باید تمامی کدها رو دوباره کامپایل کنه. با تقسیم کدها به Assemblyهای مختلف، زمان کامپایل به طور قابل توجهی کاهش می‌یابد.
2. بهبود قابلیت نگهداری کد: با تقسیم‌بندی کد به اسمبلی‌های مختلف، راحت‌تر می‌تونید کدهای خودتون رو مدیریت کنید، تغییرات رو به راحتی اعمال کنید و از اشتباهات جلوگیری کنید.
3. پشتیبانی از Dependency‌ها: با استفاده از Assembly‌ها، می‌تونید وابستگی‌ها (dependencies) رو به‌طور دقیق‌تری مدیریت کنید، به این معنی که تنها کدهایی که نیاز به تغییر دارن کامپایل می‌شوند.
4. مدیریت بهتر اسکریپت‌ها: با استفاده از Assemblies می‌تونید اسکریپت‌های خودتون رو در مجموعه‌های مختلف قرار بدید و هر کد رو به راحتی برای پلتفرم‌های مختلف یا بخش‌های مختلف پروژه‌تون استفاده کنید.

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

نکات مهم در استفاده از Assemblies:
- زمانی که از Assembly‌ها استفاده می‌کنید، باید حتماً Assembly Definition File بسازید تا یونیتی بتونه اون رو شناسایی کنه.
- هر Assembly باید دسته‌بندی صحیح و وابستگی‌های درست داشته باشه تا عملکرد بهینه رو از پروژه دریافت کنید.
- از Assembly Definition استفاده کنید تا مطمئن بشید که فقط بخش‌های مرتبط با هم در هنگام کامپایل تغییر می‌کنند.

🔧 چرا این موضوع برای شما مهمه؟
اگر در حال توسعه پروژه‌های یونیتی بزرگ‌تر یا پیچیده‌تر هستید، استفاده از Assemblies می‌تواند زمان کامپایل رو کاهش بده و کدهای شما رو منظم‌تر و قابل نگهداری‌تر کند. این موضوع در پروژه‌های طولانی‌مدت می‌تواند تفاوت بزرگی در کارایی و سرعت تیم توسعه ایجاد کند.

🔖 #GameDev, #بازیسازی

👤 ali reza

💎 Channel: @DevelopixGame
👍31
🟢 درود دوستان!

این پست مخصوص دوستانیه که هنوز از نسخه‌های قدیمی‌تر یونیتی (Unity) استفاده می‌کنن و به خاطر محدودیت‌های جدید مارکت‌ها (مثل Google Play یا کافه‌بازار)، دیگه نمی‌تونن بازی رو با Target API پایین منتشر کنن.
اما با این ترفند، لیست Android APIها توی یونیتی آپدیت می‌شه و مشکل حل می‌شه! 🔧


مشکل چیه؟
یونیتی نسخه‌های جدید Android API رو نشون نمی‌ده، گاهی حتی اگه SDK رو به‌روز کرده باشید هم ممکنه یونیتی اون‌ها رو توی لیست نشون نده.

راه حل چیه؟

1. اول از همه، چون ما در ایران هستیم و ممکنه دسترسی به سرورهای گوگل محدود باشه، فیلتر شکن رو روشن کنید و روی حالت VPN قرار بدید.
2. برید به مسیر نصب Android SDK:

SDK\cmdline-tools\latest\bin


3. توی این مسیر، یه ترمینال (CMD یا PowerShell) باز کنید و این دستور رو بزنید:

sdkmanager --list


این دستور باعث میشه SDK لیست پکیج‌ها رو با سرور گوگل هماهنگ کنه و فایل‌های اطلاعاتی (مثل packages.xml) به‌روز بشن.


❗️ نکته مهم:
گاهی یونیتی بلافاصله لیست جدید APIها رو تشخیص نمی‌ده.
برای اطمینان از اینکه همه‌چیز درست انجام شده، بعد از اجرای دستور بالا، حتما یه خروجی بگیرید. این کار باعث میشه یونیتی لیست جدید APIها رو به‌درستی شناسایی و آپدیت کنه.

⚡️ اگه اعمال نشد، یونیتی رو ببندید و دوباره باز کنید تا تغییرات اعمال بشه.


🛠 چطور مسیر SDK رو پیدا کنیم؟
در یونیتی از این مسیر:

Edit > Preferences > External Tools > Android SDK



بعد از این مراحل، به Unity برگردید، برید به Build Settings > Player Settings و حالا باید بتونید Target API جدید رو از لیست انتخاب کنید


اگه این آموزش برات مفید بود، حتما برای بقیه هم بفرست 🔁
اگه سؤالی داشتی، همین‌جا بپرس ✌️

🔖 #GameDev, #بازیسازی

👤 ali reza

💎 Channel: @DevelopixGame
7👍2
💡 کد سی‌شارپ تو یونیتی چطوری اجرا میشه؟

🔥 خیلیا فکر می‌کنن چون داریم با C# تو یونیتی کار می‌کنیم، پس کل پروژه با دات‌نت اجرا میشه، ولی واقعیت خیلی عمیق‌تره..


🧩 ساختار

یونیتی در باطن یه موتور بازی‌سازیه که با زبان C++ ساخته شده. یعنی بخش‌های اصلیش مثل فیزیک، رندرینگ، مدیریت صحنه، و غیره، کاملاً به زبان C++ هستن.
سی‌شارپ فقط یه لایه واسط برای تعامل راحت‌تر با این سیستم C++ هست.


⚙️ فرایند خروجی گرفتن

مثلاً وقتی خروجی اندروید می‌گیری، اون دستگاه اصلاً دات‌نت یا C# رو نمی‌شناسه.
یونیتی باید کل کدهای شما رو به یه چیزی تبدیل کنه که اندروید بفهمه. این کار با تکنولوژی‌ای به نام IL2CPP انجام میشه.


🎯 فرق بین API یونیتی و کد دات‌نت

اگه فقط از APIهای خود یونیتی مثل Transform, Rigidbody, Animator و امثال اینا استفاده کرده باشی، یونیتی خیلی راحت اون‌ها رو مستقیماً به C++ تبدیل می‌کنه. این یعنی:

● سریع‌تر اجرا میشه
● حجم خروجی کمتره
● مصرف رم پایین‌تره


⛔️ ولی اگه...

اگه از کدهای خود دات‌نت استفاده کرده باشی، مثل:

📁 فایل: System.IO برای خوندن فایل
🌐 دانلود: System.Net.HttpClient برای ارتباطات اینترنتی
غیربلوک: async/await و Task برای انجام کارها به‌صورت غیرهم‌زمان
🔍 تحلیل: Reflection, Linq, Regex برای بررسی، جستجو یا پردازش ساختار کد و داده‌ها

یونیتی باید یه لایه‌ی شبیه‌سازی برای اجرا کردن اینا بذاره، چون اینا مستقیم به موتور یونیتی وصل نیستن، بلکه به خود CLR دات‌نت وابسته‌ان.


🐢 نتیجه چیه؟

کدی که به سیستم دات‌نت وابسته باشه تو خروجی:

● کندتر اجرا میشه (چون شبیه‌سازی میشه)
● خروجی بازی حجیم‌تره
● ممکنه روی بعضی پلتفرم‌ها درست کار نکنه یا با باگ‌های خاص مواجه بشی


🚀 راه حل چیه؟

تا جایی که می‌تونی از ابزارهای خود یونیتی استفاده کن. مثلاً:

● به جای async/await از Coroutine استفاده کن
● به جای HttpClient از UnityWebRequest
● برای پردازش‌های سنگین از Job System و Burst استفاده کن

🔖 #GameDev, #بازیسازی

👤 ali reza

💎 Channel: @DevelopixGame
🔥7👍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


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

🔖 #GameDev, #بازیسازی

👤 ali reza

💎 Channel: @DevelopixGame
🔥8