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

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

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
پلتفرمر 2D در Unity — حرکت و پرش ساده 🎮

در این پست یک آموزش عملی و واقعی از مجموعه‌های رسمی Unity برای ساخت کنترلر سادهٔ بازیکن در بازی‌های 2D خلاصه شده است. مرجع اصلی: Unity Learn - 2D Platformer و مستندات Rigidbody2D.

نکات کلیدی:
• ایجاد پروژه 2D و اضافه کردن Tilemap یا صحنهٔ ساده.
• اضافه کردن Rigidbody2D و Collider2D به بازیکن.
• نوشتن اسکریپت C# برای حرکت افقی و پرش با استفاده از ورودی‌های پیش‌فرض.
• استفاده از انیماتور برای حالت‌های Idle/Run/Jump (اختیاری).

نمونهٔ کد عملی (صحت با مستندات Unity):
using UnityEngine;

public class PlayerController : MonoBehaviour
{
public float speed = 5f;
public float jumpForce = 7f;
Rigidbody2D rb;
bool grounded;

void Awake() { rb = GetComponent<Rigidbody2D>(); }
void Update()
{
float h = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(h * speed, rb.velocity.y);
if (Input.GetButtonDown("Jump") && grounded) rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
void OnCollisionEnter2D(Collision2D c) { grounded = true; }
void OnCollisionExit2D(Collision2D c) { grounded = false; }
}


چرا این مفید است: این الگو پایهٔ اکثر بازی‌های پلتفرمر را می‌سازد — کنترل دقیق حرکت، پردازش فیزیک ساده و امکان توسعه برای انیمیشن و سرور/ورژن موبایل. مثال‌های واقعی را در پروژهٔ آموزشی Unity Learn خواهید یافت.

یک خط پایانی: کد را در صحنه خود امتحان کنید و نتیجه را با دیگران به اشتراک بگذارید.

🔖 #GameDev #بازیسازی #unity #2d #platformer #csharp #game_dev

👤 Developix

💎 Channel: @DevelopixGame
3👎1
🚀 کدام API گرافیکی؟ مقایسه OpenGL، DirectX و Vulkan

اصلا API گرافیکی چیه؟

رابط نرم‌افزاری گرافیکی (API) مثل یک «پل ارتباطی» عمل می‌کند. این واسط، دستورات برنامه (مثل یک بازی) را به زبان قابل فهم برای کارت گرافیک (GPU) شما ترجمه و ارسال می‌کند.

برنامه‌نویس بدون درگیری با جزئیات سخت‌افزاری، فقط با دستورات استاندارد API کار می‌کند.

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


1️⃣ اوپن‌جی‌ال (OpenGL): قدیمی اما کارآمد (مخفف Open Graphics Library به معنی کتابخانه گرافیکی باز)

★ وضعیت: API قدیمی و سطح بالا (High-Level).
★ مدیریت: کدنویسی برای توسعه‌دهنده آسان‌تر است.
★ عملکرد: بیشتر بار کاری روی CPU می‌افتد (سربار CPU بالا).
★ پلتفرم: کراس‌پلتفرم (قابل استفاده در اکثر سیستم‌عامل‌ها).
★ خلاصه: ساده، اما در کارهای سنگین کُندتر.


2️⃣ دایرکت‌اکس (DirectX): سلطان ویندوز (مخفف Direct eXtension به معنی توسعه مستقیم)

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


3️⃣ وولکان (Vulkan): آینده کراس‌پلتفرم (وولکان یک اسم خاص لاتین به معنی آتشفشان یا ایزد آتش است و نماد قدرت و انفجار پرفورمنس آن است.)

★ وضعیت: API سطح پایین (Low-Level) و بسیار قدرتمند.
★ مدیریت: به GPU دسترسی مستقیم‌تر می‌دهد و سربار CPU را شدیداً کاهش می‌دهد.
★ ویژگی کلیدی: بهره‌گیری کامل از قابلیت چندنخی (Multithreading) و CPUهای چند هسته‌ای.
★ پلتفرم: کراس‌پلتفرم (در اندروید، لینوکس، ویندوز و...).
★ نکته مهم: Vulkan توسط گروه Khronos (همان سازنده OpenGL) ساخته شد تا محدودیت‌های OpenGL را برطرف کرده و با DX12 رقابت کند.
★ خلاصه: بهینه‌ترین، چندپلتفرمه، اما نیاز به مدیریت دقیق دارد.


💡 نتیجه‌گیری:

★ اوپن‌جی‌ال: سادگی و سازگاری بالا، اما پرفورمنس محدود.
★ دایرکت‌اکس: بهترین پرفورمنس در ویندوز، اما انحصاری.
★ وولکان: بیشترین پرفورمنس و کراس‌پلتفرم، جانشین مدرن OpenGL.

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

👤 ali reza

💎 Channel: @DevelopixGame
🔥83
الگوی Observer در گیم دیولوپمنت: خداحافظ کدهای به هم چسبیده 👋

یکی از تمیزترین راه‌ها برای مدیریت رویدادها در بازی، مخصوصاً توی Unity، استفاده از الگوی Observer است.
به جای این که هر سیستم مستقیماً به بقیه Reference بدهد و همه‌چیز به هم وابسته شود، رویداد تعریف می‌کنیم و بقیه فقط «گوش می‌دهند» 🎧

مثال کلاسیک: وقتی بازیکن سکه برمی‌دارد:

• سیستم امتیاز باید Score را زیاد کند
• UI باید امتیاز جدید را نمایش بدهد
• یک SoundManager باید افکت صدا پخش کند

اگر PlayerController همه این‌ها را مستقیم صدا بزند، وابستگی‌های زیادی ساخته می‌شود و هر تغییر کوچک، چند فایل را تحت تأثیر قرار می‌دهد. این ضد Clean Code است.

با Observer، Player فقط می‌گوید: «رویداد CoinCollected اتفاق افتاد». بقیه سیستم‌ها خودشـان Subscribe می‌شوند 👇

using System;
using UnityEngine;

public class GameEvents : MonoBehaviour
{
public static GameEvents Instance;

public event Action<int> OnCoinCollected;

void Awake()
{
if (Instance == null)
Instance = this;
else
Destroy(gameObject);
}

public void CoinCollected(int amount)
{
OnCoinCollected?.Invoke(amount);
}
}


حالا Player فقط رویداد را فایر می‌کند و هیچ چیز دیگری را نمی‌شناسد:

public class PlayerCoins : MonoBehaviour
{
public void CollectCoin(int amount)
{
GameEvents.Instance.CoinCollected(amount);
}
}


سیستم امتیاز و UI فقط Subscribe می‌شوند:

public class ScoreSystem : MonoBehaviour
{
int score;

void OnEnable()
{
GameEvents.Instance.OnCoinCollected += HandleCoin;
}

void OnDisable()
{
GameEvents.Instance.OnCoinCollected -= HandleCoin;
}

void HandleCoin(int amount)
{
score += amount;
// Update save, analytics, etc.
}
}


چرا این معماری برای بازی‌ها عالی است؟

🧩 Decoupling: Player هیچ اطلاعی از UI یا ScoreSystem ندارد؛ تست و تغییر ساده‌تر می‌شود.
🔌 افزودن سیستم جدید: فردا می‌توان یک VFX جدید ساخت که فقط به همین رویداد Subscribe شود، بدون تغییر در Player.
🧹 Clean Code: تابع‌ها یک مسئولیت مشخص دارند (نزدیک به اصل Single Responsibility).

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

🔖 #GameDev #بازیسازی #Observer #EventSystem #Unity #CleanCode #GameArchitecture #C#

👤 Developix

💎 Channel: @DevelopixGame
🔥7👍1
🎮 کنترل حرکت نرم با deltaTime

یکی از اشتباه‌های رایج تو بازی‌های ۲بعدی Unity اینه که سرعت حرکت یا انیمیشن رو مستقیم به frame rate گره می‌زنیم. روی سیستم قوی، همه‌چی اوکیه؛ ولی روی سیستم ضعیف، کاراکتر کند می‌شه یا حرکت‌ها تیک‌تیک می‌خوره 😅

راه‌حل ساده‌ست: همیشه حرکت، فیزیک ساده و انیمیشن‌های محاسباتی رو به Time.deltaTime ضرب کن تا وابسته به فریم نباشن.

🔹 مثال بد (وابسته به فریم):
void Update()
{
transform.position += Vector3.right * 5f;
}

روی ۳۰fps کاراکتر کندتر از ۱۴۴fps حرکت می‌کنه، چون در هر فریم ۵ واحد می‌ره جلو.

🔹 مثال درست (frame independent):
void Update()
{
float speed = 5f; // units per second
transform.position += Vector3.right * speed * Time.deltaTime;
}

حالا speed بر حسب «واحد در ثانیه» تعریف شده و deltaTime تضمین می‌کنه در هر ثانیه تقریباً همون مقدار طی بشه، چه ۳۰fps باشه چه ۱۲۰fps

📌 نکته‌ها:
- برای حرکت‌ها، lerp دستی، fadeها و هر چیز «وابسته به زمان»، از Time.deltaTime استفاده کن.
- برای فیزیک Rigidbody بهتره منطق اصلی تو FixedUpdate باشه و از Time.fixedDeltaTime کمک بگیری.
- اگر بازی Pause می‌شه، می‌شه از Time.unscaledDeltaTime برای UI Animationهایی که نباید متوقف بشن استفاده کرد.

این ریزه‌کاری ساده کمک می‌کنه بازی روی دستگاه‌های مختلف تجربه‌ای یکسان و حرفه‌ای داشته باشه 🚀

منبع رسمی Unity:
Unity Time.deltaTime Docs

🔖 #GameDev #بازیسازی #Unity #deltaTime #performance #movement #2D #frame_rate

👤 Developix

💎 Channel: @DevelopixGame
👍3
مدیریت State بازی بدون if-های بی‌انتها 🎮

یکی از جاهایی که کد خیلی سریع شلوغ می‌شود، مدیریت حالت‌های مختلف بازی است:

🏁 منوی اصلی
🕹️ گیم‌پلی
⏸️ Pause
💀 Game Over

اگر این حالت‌ها را با یک عالمه if/else یا switch در یک کلاس غول‌آسا کنترل کنیم، به‌مرور هر تغییر کوچک تبدیل به کابوس می‌شود.

اینجاست که State Pattern کمک می‌کند کد تمیزتر، قابل‌گسترش‌تر و مخصوصاً برای پروژه‌های بلندمدت قابل‌تحمل بماند 😄

ایده State Pattern در بازی
هر حالت بازی در یک کلاس جدا پیاده‌سازی می‌شود که یک اینترفیس مشترک دارد. یک کلاس GameStateMachine فقط مسئول این است که بداند الان در کدام State هستیم و چه زمانی State را عوض کند.

این کار چند مزیت مهم دارد:

• اضافه‌کردن حالت جدید بدون دست‌زدن به بقیه 4 کدها
• حذف if/else عظیم
• راحت‌تر شدن دیباگ و تست هر حالت جداگانه

نمونه ساده در Unity (C#)

public interface IGameState
{
void Enter();
void Exit();
void Tick();
}

public class GameplayState : IGameState
{
public void Enter()
{
Debug.Log("Enter Gameplay");
Time.timeScale = 1f;
}

public void Exit()
{
Debug.Log("Exit Gameplay");
}

public void Tick()
{
// منطق گیم‌پلی
}
}

public class PauseState : IGameState
{
public void Enter()
{
Debug.Log("Enter Pause");
Time.timeScale = 0f;
}

public void Exit()
{
Debug.Log("Exit Pause");
Time.timeScale = 1f;
}

public void Tick()
{
// منطق منوی Pause
}
}

public class GameStateMachine
{
private IGameState _current;

public void ChangeState(IGameState next)
{
_current 3F.Exit();
_current = next;
_current.Enter();
}

public void Tick()
{
_current 3F.Tick();
}
}


در یک MonoBehaviour می‌توان یک نمونه از GameStateMachine ساخت، State اولیه را تنظیم کرد و در Update فقط Tick() را صدا زد. با این کار منطق مدیریت State از بقیه کد جدا می‌شود و ساختار پروژه تمیزتر می‌ماند.

نکات عملی برای پروژه‌های بازی

• برای Stateهای زیاد (مثلاً لابی آنلاین، لودینگ، سینماتیک‌ها)، این الگو جلوی God Class شدن GameManager را می‌گیرد.
• انتقال بین Stateها را می‌توان در یک کلاس مرکزی (یا ScriptableObject در Unity) تعریف کرد تا منطق گذارها هم مرتب بماند.
• در پروژه‌های تیمی، این معماری کمک می‌کند هر نفر روی یک State کار کند بدون این‌که توی کد بقیه خرابکاری شود.

منابع خوب برای مرور این ایده:
Game Programming Patterns - State
Unity Learn

کدهای مدیریت State اگر از همین ابتدا تمیز طراحی شوند، مقیاس‌پذیری پروژه خیلی راحت‌تر می‌شود و تغییر دیزاین بازی دیگر معادل بازنویسی نصف پروژه نخواهد بود 🚀

🔖 #GameDev #بازیسازی #State_Pattern #Game_Architecture #Unity #C# #Clean_Code #Game_States

👤 Developix

💎 Channel: @DevelopixGame
🔥5👍1
در این کد Python که شبیه یک event loop ساده برای بروزرسانی وضعیت چند entity در یک بازی است، خروجی نهایی چاپ‌شده روی ترمینال چیست؟

به ترتیب و شکل دقیق متن خروجی (شامل فاصله‌ها و خط‌های جدید) دقت کنید و کل خروجی را بنویسید.

# Game-like update loop with shared state

positions = {"player": [0, 0], "enemy": [5, 5]}

snapshots = []

for tick in range(3):
for name, pos in positions.items():
dx = 1 if name == "player" else -1
dy = 0 if name == "player" else -1
pos[0] += dx
pos[1] += dy
snapshots.append((tick, list(positions.values())))

for tick, state in snapshots:
print(f"tick {tick} => {state}")


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

👤 Developix

💎 Channel: @DevelopixGame
👍31
دراو کال (Draw Call) در بازی‌سازی چیست؟
به زبان ساده، Draw Call یک "دستور" است که CPU به GPU می‌دهد و می‌گوید: "این آبجکت رو با این تنظیمات روی صفحه بکش."

فرض کنید یک نقاش (GPU) و یک مدیر (CPU) دارید:
● مدیر به نقاش می‌گوید: "این صندلی رو بکش." (یک Draw Call)
● بعد می‌گوید: "حالا قلم‌مو رو عوض کن و اون میز رو بکش." (یک Draw Call دیگه)

⚠️ چرا مهمه و مشکل کجاست؟
مشکل اینجاست که GPU خیلی سریعه، اما CPU برای آماده‌سازی هر دستور وقت می‌ذاره.
اگر شما ۱۰۰۰ تا سنگ توی بازی داشته باشید و برای هر کدوم یک دستور جداگانه بفرستید، CPU وقتش صرف "کاغذبازی" و ارسال دستورات میشه و GPU بیکار منتظر می‌مونه.

💡 قانون طلایی: هرچقدر تعداد Draw Callها کمتر باشه، فشار روی CPU کمتره و فریم‌ریت بالاتری می‌گیرید.

🛠 چطور Draw Callها رو کم کنیم؟ (Optimization)

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

1. استفاده از Texture Atlas:
به جای ۱۰ تا تکسچر جدا برای ۱۰ تا آبجکت، همه رو توی یک عکس بزرگ جا بدید تا متریال عوض نشه.

2. بچینگ (Batching):
موتورهایی مثل یونیتی و آنریل قابلیت Static Batching دارند. این کار آبجکت‌های ساکن (مثل دیوارها و صخره‌ها) رو در پشت صحنه به یک آبجکت بزرگ تبدیل می‌کنه تا با یک Draw Call رسم بشن.

3. تکنیک GPU Instancing:
وقتی می‌خواید هزاران کپی از یک آبجکت (مثل چمن، درخت یا سربازها) داشته باشید، از این تکنیک استفاده کنید تا CPU فقط یک بار دستور بده: "این مدل رو ۱۰۰۰ بار در این مختصات‌ها بکش."

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

👤 ali reza

💎 Channel: @DevelopixGame
5
Forwarded from ابر ویراک
⭕️ ویراک کلود
زیرساختی مطمئن برای کسب و کارهای آنلاین
🎁 20% شارژ بیشتر روی اولین واریزی
⚡️با کد معرف: 10%  شارژ برای شما و 10% برای دوستتان!

🔘با IPv6 رایگان
🔘با IP مازاد
🔘تست رایگان 2 روزه
🔘فایروال اختصاصی
🔘با API برای حرفه‌ای ها
🔘پشتیبانی 24 ساعته
🔘آپلود رایگان


📞 همین حالا با ما تماس بگیرید و این فرصت فوق‌العاده رو از دست ندید!
🔻02191555530
🌐Virakcloud.com
Please open Telegram to view this post
VIEW IN TELEGRAM
1
در کد زیر که برای ساده‌سازی یک سیستم Object Pool در بازی نوشته شده، توسعه‌دهنده انتظار دارد هر بار که یک دشمن غیر فعال می‌شود، به شکل درست به استخر برگردد و دوباره استفاده شود؛ اما بعد از چند دقیقه بازی، تعداد دشمن‌های فعال بی‌دلیل زیاد می‌شود و ظاهراً Object Pool عملاً کار نمی‌کند.

به دقت کد را بررسی کنید: چه چیزی در منطق مدیریت استخر (Pool) اشتباه است و دقیقاً چه تغییری باید بدهید تا سیستم Object Pool همان‌طور که باید، از ایجاد مکرر دشمن‌های جدید جلوگیری کند؟

راهنما: به محل اضافه شدن Enemy ها به لیست‌ها و نحوه استفاده از متغیر isActive دقت کنید.

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

👤 Developix

💎 Channel: @DevelopixGame
🔥2
DOTween برای انیمیشن‌های تمیز تو Unity 🎮

برای هر چیزی تو بازی انیمیشن می‌نویسی؟ از حرکت ساده UI تا شیک کردن دوربین؟ 🤯
DOTween یه tweening engine خیلی سریع برای Unityـه که کار انیمیشن رو از کدنویسی خسته‌کننده به چند خط تمیز تبدیل می‌کنه.

مزیت‌ها:
• انیمیشن position، rotation، scale، رنگ، عدد و… فقط با یه خط
• Sequence ساختن برای زنجیره کردن چند انیمیشن پشت‌سرهم
• پرفورمنس بالا، مناسب موبایل و کنسول
• ادغام راحت با Timeline و Animator

نصب (Unity):
1) از Package Manager روی Add package from git URL
2) آدرس زیر رو بزن:
https://github.com/Demigiant/dotween


نمونه کد ساده:
using DG.Tweening;
using UnityEngine;

public class MoveCube : MonoBehaviour
{
void Start()
{
// حرکت نرم به مختصات جدید در 1.5 ثانیه
transform.DOMove(new Vector3(0, 3, 0), 1.5f)
.SetEase(Ease.OutBack)
.SetLoops(2, LoopType.Yoyo);
}
}


برای UI animations (مثل popup منو، دکمه‌ها، health bar) DOTween واقعاً زمان دیباگ و iteration رو کم می‌کنه.

مستندات و دانلود:
Docs & Download
GitHub

امتحانش کن و کم‌کم هر انیمیشن سختی رو با چند تا tween جمع کن

🔖 #GameDev #بازیسازی #Unity #DOTween #GameDev #C# #Animation #Tweening

👤 Developix

💎 Channel: @DevelopixGame
2🔥1
Photon Fusion؛ Multiplayer پایدار برای بازی‌های Unity 🎮

اگر برای بازی‌هات تو Unity به دنبال netcode راحت، پایدار و scalable هستی، Photon Fusion از بهترین گزینه‌هاست. کلی از بازی‌های commercial الان روی Photon می‌چرخن، بدون این‌که خودت مستقیم درگیر low-level socket و replication بشی.

چرا Fusion؟
• مدل‌های مختلف: Host, Server, Shared, Prediction
• Snapshot & State Sync آماده برای بازی‌های سریع (Shooter, Racing و ...)
• Built-in Lag Compensation و Hit Detection دقیق
• Integration خوب با Unity و Inspector -محور

نمونه کد ساده برای Spawn بازیکن ⬇️
using Fusion;
using UnityEngine;

public class GameManager : NetworkBehaviour {
[SerializeField] NetworkPrefabRef playerPrefab;

public override void Spawned() {
if (Object.HasStateAuthority) {
Runner.Spawn(playerPrefab,
Vector3.zero,
Quaternion.identity,
Object.InputAuthority);
}
}
}


لینک‌ها 🔗
Docs رسمی Photon Fusion
Sampleهای GitHub

امتحانش کن روی یک Prototype کوچک، latency و sync رو بسنج و کم‌کم netcode بازی اصلی‌ات رو روی Fusion ببری جلو. 🚀

🔖 #GameDev #بازیسازی #Unity #Multiplayer #Networking #Photon #GameDev #C#

👤 Developix

💎 Channel: @DevelopixGame
👍2