| کانال توسعه‌دهندگان بازی |
500 subscribers
21 photos
1 video
24 links
⭕️ کانال توسعه‌دهندگان بازی دولوپیکس

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

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
Godot برای بازی‌سازها یه کتابخونه/انجین اوپن‌سورسه که مخصوصاً برای 2D فوق‌العاده‌ست و یادگیریش سریع پیش میره. یکی از چیزهای دوست‌داشتنیش سیستم InputMap ـه که مدیریت کنترل‌ها رو خیلی تمیز می‌کنه 🎮

به‌جای این‌که هرجا مستقیم روی key code کار کنی، یه «اکشن» تعریف می‌کنی (مثلاً move_right) و بعد هر کلیدی رو می‌تونی بهش مپ کنی. این یعنی:

• تنظیم راحت کنترل روی PC و موبایل
• قابل‌خواندن‌تر شدن کد
• تغییر دادن کنترل‌ها بدون دست‌زدن به منطق گیم‌پلی

نمونه کد GDScript برای حرکت ساده پلیر:
extends CharacterBody2D

const SPEED = 200.0

func _physics_process(delta):
var dir = Vector2.ZERO
if Input.is_action_pressed("move_right"):
dir.x += 1
if Input.is_action_pressed("move_left"):
dir.x -= 1

velocity = dir.normalized() * SPEED
move_and_slide()


اکشن‌ها رو توی Project > Project Settings > Input Map تعریف کن، بعد توی هر اسکریپتی مثل بالا مصرفشون کن ✅

مستندات رسمی Godot:
docs.godotengine.org
سورس و Issuesها:
github.com/godotengine/godot

چند دقیقه با InputMap بازی کن؛ معمولاً بعدش دیگه برنمی‌گردی به چک‌کردن مستقیم key code ها 😉

🔖 #GameDev #بازیسازی #Godot #GDScript #Input #GameDev #2D

👤 Developix

💎 Channel: @DevelopixGame
👍4
در بازی‌های سریع، تکیه‌کردن به deltaTime خام می‌تونه اختلاف سرعت روی دستگاه‌های مختلف ایجاد کنه؛ مخصوصاً وقتی FPS خیلی می‌افتد یا روی بعضی دستگاه‌ها خیلی بالاست. برای حرکت‌های حساس (مثل گلوله، ضربهٔ شمشیر، یا حرکت دوربین) بهتره deltaTime رو clamp کنیم.

ایده اینه که نذاریم یک فریم خیلی بزرگ، ناگهان آبجکت رو تلپورت کنه 🚀

در Unity نمونه ساده:
void Update()
{
float dt = Time.deltaTime;
dt = Mathf.Clamp(dt, 0f, 0.03f); // حداکثر ~۳۳ FPS

// مثال حرکت ساده
transform.position += Vector3.forward * speed * dt;
}


👾 نتیجه:
- انیمیشن و حرکت‌ها پایدارتر می‌شن.
- روی دستگاه‌های ضعیف، افت FPS باعث پرش شدید (stutter/teleport) نمی‌شه.

بهتره این کار فقط برای سیستم‌هایی انجام بشه که به دقت بالا نیاز دارن (مثل حرکت یا physics دست‌ساز)، نه برای همه‌چیز.

مرجع رسمی Unity در مورد Time.deltaTime:
docs.unity3d.com/ScriptReference/Time-deltaTime.html

امتحان این الگو روی حرکت کاراکتر یا دوربین، معمولاً خیلی سریع تفاوت روان بودن بازی رو نشون می‌ده ✨

🔖 #GameDev #بازیسازی #Unity #deltaTime #Performance #Game_Loop #Movement

👤 Developix

💎 Channel: @DevelopixGame
👍1
در بازی‌های موبایل و حتی PC، یکی از قاتل‌های فریم‌ریت، تعداد زیاد Draw Call هست. خوشبختانه در Unity برای آبجکت‌های ثابت صحنه، راه‌حل ساده‌ای وجود داره: Static Batching 🧱

وقتی یک سری Mesh که حرکت نمی‌کنن رو Static می‌کنی، Unity می‌تونه اون‌ها رو توی چند Mesh بزرگ‌تر ترکیب کنه و به‌جای ده‌ها Draw Call، فقط چند تا بفرسته سمت GPU. نتیجه: CPU سبک‌تر، فریم‌ریت پایدارتر ✅

نمونه استفاده (C#):
using UnityEngine;

public class MarkStatic : MonoBehaviour
{
public GameObject[] staticObjects;

void Start()
{
foreach (var go in staticObjects)
{
// فقط برای آبجکت‌هایی که حرکت، مقیاس یا چرخش ندارن
go.isStatic = true;
}
}
}


نکته‌ها 📝
• برای دیوار، ساختمان، سنگ، درخت‌های ثابت و… عالیه.
• برای آبجکتی که قرارِ حرکت کنه، از Static Batching استفاده نکن؛ باعث هزینه اضافی و باگ‌های عجیب می‌شه.

موقع پروفایل گرفتن، قبل و بعد از فعال‌کردن Static Batching، تعداد Draw Call رو توی Stats یا Profiler چک کن و تفاوتش رو ببین.

مرجع رسمی: Unity Manual – Draw Call Batching

امتحانش روی یک صحنه شلوغ باعث می‌شه تاثیرش رو خیلی سریع حس بشه 🚀

🔖 #GameDev #بازیسازی #Unity #Performance #DrawCall #StaticBatching #GameDev #Optimization

👤 Developix

💎 Channel: @DevelopixGame
👍2❤1
در کد زیر برای پیاده‌سازی زمان‌بندی شلیک در یک بازی دوبعدی، از delta time به‌صورت نادرست استفاده شده است و ممکن است نرخ شلیک روی سیستم‌های مختلف (fpsهای متفاوت) ناسازگار شود:

import pygame

class Player:
def __init__(self):
self.fire_rate = 0.5 # ثانیه بین هر شلیک
self.time_since_last_shot = 0

def update(self, dt):
self.time_since_last_shot += 1 # استفاده اشتباه از dt

def can_shoot(self):
return self.time_since_last_shot >= self.fire_rate

def shoot(self):
if self.can_shoot():
print("Shoot!")
self.time_since_last_shot = 0

clock = pygame.time.Clock()
player = Player()

running = True
while running:
dt = clock.tick(120) / 1000.0 # dt بر حسب ثانیه
player.update(dt)
player.shoot()


در این کد چه چیزی باید اصلاح شود تا زمان‌بندی شلیک روی fpsهای مختلف یکسان و قابل‌اعتماد باشد؟

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

👤 Developix

💎 Channel: @DevelopixGame
🎯 کنترل دقیق برخوردها در Unity با LayerMask

خیلی وقت‌ها افت فریم بازی از تعداد بالای collision check می‌آد، نه از گرافیک. مخصوصاً وقتی برای هر چیز کوچیکی از Physics.Raycast یا Overlapها استفاده می‌شه.

یک ترفند ساده ولی خیلی تاثیرگذار اینه که برخوردها رو با Layer‌ها و LayerMask محدود کنی تا فیزیک فقط روی چیزهای مهم حساب کنه 🚀

مثلاً برای تیر اسلحه فقط دشمن‌ها رو چک کن، نه کل صحنه:

public LayerMask enemyLayer;

void Shoot()
{
Ray ray = new Ray(transform.position, transform.forward);
if (Physics.Raycast(ray, out var hit, 100f, enemyLayer))
{
// فقط اگر به enemy خورد
// Damage logic...
}
}


📌 نکته‌ها:
- برای هر system (مثل تیر، AI، interactableها) یک یا چند Layer مشخص کن.
- در منوی Project Settings → Physics، ماتریس برخورد (Layer Collision Matrix) رو تنظیم کن تا بعضی Layerها کلاً با هم برخورد نداشته باشن.

این کار هم CPU رو سبک‌تر می‌کنه، هم دیباگ برخوردها رو خیلی تمیزتر و قابل‌فهم‌تر نگه می‌داره 😌

ℹ️ مرجع رسمی:
Unity LayerMask Documentation

🔖 #GameDev #بازیسازی #Unity #Physics #Collision #LayerMask #Performance #GameDev

👤 Developix

💎 Channel: @DevelopixGame
👍1🔥1
Forwarded from Developix Support
This media is not supported in your browser
VIEW IN TELEGRAM
🏆آفرهای جام جهانی ۲۰۲۶ هاست‌ایران فعال شد!

با کمپین «ترکیب برنده سایتت»، زیرساخت سایتت رو برای روزهای پرترافیک آماده کن:

🔥 ۲۵٪ تخفیف روی پلن‌های ۳ ماهه هاست اشتراکی ایران
⚡ ۵۰٪ تخفیف روی پلن‌های یک‌ماهه سرویس ابری در دیتاسنترهای تهران، مشهد و اهواز

🧠 مشاوره رایگان زیرساخت توسط کارشناسان هاست‌ایران
فرصت استفاده از تخفیف‌ها و ثبت فرم مشاوره محدود است.

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

📌صفحه فرم مشاوره
📌تلگرام هاست‌ایران
📌بله هاست‌ایران


#هاست_ایران #سرور_ابری_هاست_ایران #هاست_اشتراکی #دیتاسنتر #مشاوره_زیرساخت #جام_جهانی2026
💠 نسخه جدید انجین یونیتی (Unity) منتشر شده است

🔸 ارتقا از نسخه 6000.3.18f1 به 6000.0.78f1

🔹 لیست تغییرات این نسخه:


🔖 #unity, #game, #release

💎 @DevelopixGame
👍2
💠 نسخه جدید انجین یونیتی (Unity) منتشر شده است

🔸 ارتقا از نسخه 6000.0.78f1 به 6000.3.19f1

🔹 لیست تغییرات این نسخه:


🔖 #unity, #game, #release

💎 @DevelopixGame
👍2
در Godot اگر برای AI دنبال کردن پلیر و حرکت روی زمین‌های پیچیده می‌خواهی، کلاس NavigationAgent3D توی Godot 4 خیلی کمک می‌کند 🚀

این سیستم روی NavigationServer3D سوار است و مشکل pathfinding روی meshهای پیچیده، رمپ، پله و… را حل می‌کند، بدون این‌که خودت الگوریتم A* پیاده‌سازی کنی.

چند نکته جذاب:
• استفاده از navmesh اتوماتیک یا دستی
• جلوگیری از گیر کردن AI به دیوارها و لبه‌ها
• پشتیبانی از avoidance ساده برای برخورد نکردن Agentها به هم
• کارکرد مستقیم در Inspector، بدون boilerplate زیاد

نمونه‌کد ساده برای دنبال‌کردن پلیر:
extends CharacterBody3D

@onready var agent = $NavigationAgent3D
@onready var player = $"../Player"

func _physics_process(delta: float) -> void:
agent.target_position = player.global_transform.origin
var next_point = agent.get_next_path_position()
var dir = (next_point - global_transform.origin).normalized()
velocity = dir * 4.0
move_and_slide()


مستندات رسمی Godot 4 در مورد Navigation و NavigationAgent3D:
Navigation Docs

امتحانش کن روی یک صحنه ساده دشمن/پلیر؛ خیلی سریع یک AI قابل قبول برای پروتوتایپ می‌گیری 😎

🔖 #GameDev #بازیسازی #Godot #Navigation #AI #GameDev #Pathfinding #Godot4 #NavigationAgent3D

👤 Developix

💎 Channel: @DevelopixGame
❤3👍2
💠 نسخه جدید انجین یونیتی (Unity) منتشر شده است

🔸 ارتقا از نسخه 6000.3.19f1 به 6000.0.79f1

🔹 لیست تغییرات این نسخه:
- به‌روزرسانی Gradle به ۹.۱ و AGP به ۹.۰
- رفع مشکل نسخه‌کد اشتباه در split APKهای اندروید
- آپدیت بسته‌های خدمات آنلاین Unity (Cloud Code، Economy، Leaderboards و …)
- بهبود مستندات و رفتار استریم مِیپ‌مپ‌ها در گرافیک
- به‌روزرسانی Netcode و ابزارهای چندنفره برای پایداری بهتر
- سایر رفع باگ‌ها و بهبودهای جزئی و غیره

🔖 #unity, #game, #release

💎 @DevelopixGame
👍2
💠 نسخه جدید نرم‌افزار بلندر (Blender) منتشر شده است

🔸 ارتقا از نسخه 5.1.2 به 5.2.0

🔖 #blender, #game, #release

💎 @DevelopixGame
👍2
💠 نسخه جدید انجین یونیتی (Unity) منتشر شده است

🔸 ارتقا از نسخه 6000.0.79f1 به 6000.3.20f1

🔹 لیست تغییرات این نسخه:


🔖 #unity, #game, #release

💎 @DevelopixGame
در کد زیر حرکت کاراکتر بر اساس frame rate محاسبه شده و نه بر اساس delta time، که می‌تواند روی سیستم‌های مختلف باعث تفاوت سرعت حرکت شود.

سؤال:
چه تغییری باید در منطق به‌روزرسانی سرعت/موقعیت داده شود تا سرعت حرکت کاراکتر مستقل از تعداد فریم و فقط وابسته به زمان واقعی (delta time) باشد؟


public class PlayerController : MonoBehaviour
{
public float speed = 5f;
private Vector3 direction;

void Update()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");

direction = new Vector3(horizontal, 0f, vertical);

// Anti Pattern: وابسته به frame rate
transform.position += direction * speed;
}
}


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

👤 Developix

💎 Channel: @DevelopixGame
👍2
Forwarded from Developix Support
با Migration Boost هاست‌ایران، برای مهاجرت به سرور ابری دوباره هزینه ترافیک نده! 🚀

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

✅ حداقل ۱۰۰ گیگابایت ترافیک هدیه مهاجرت
✅ افزایش حجم هدیه متناسب با ظرفیت دیسک اولیه
✅ ترافیک آپلود رایگان
✅ بدون محدودیت زمانی

سرور ابری هاست‌ایران را راه‌اندازی کنید و بکاپ‌ها، فایل‌ها و پایگاه داده خود را بدون دغدغه هزینه‌های پنهان ترافیک منتقل کنید.

👇 مشاهده پلن‌های سرور ابری هاست‌ایران
hostiran.club/Migration
hostiran.club/Migration
💠 نسخه جدید انجین یونیتی (Unity) منتشر شده است

🔸 ارتقا از نسخه 6000.0.80f1 به 6000.3.21f1

🔹 لیست تغییرات این نسخه:


🔖 #unity, #game, #release

💎 @DevelopixGame
👍1
در کد زیر (C# برای Unity) یک سیستم ساده رویداد برای وقتی که دشمن می‌میرد پیاده‌سازی شده است، اما در طول اجرای طولانی بازی باعث Memory Leak و افت عملکرد می‌شود:

public class Enemy : MonoBehaviour
{
public static event Action OnAnyEnemyDied;

private void OnEnable()
{
OnAnyEnemyDied += HandleAnyEnemyDied;
}

private void OnDisable()
{
// عمداً خالی گذاشته شده
}

private void OnDestroy()
{
if (OnAnyEnemyDied != null)
{
OnAnyEnemyDied();
}
}

private void HandleAnyEnemyDied()
{
Debug.Log("Enemy heard another enemy died");
}
}


در این پیاده‌سازی چه چیزی باید اصلاح شود تا از Memory Leak و فراخوانی‌های ناخواسته رویداد در طول بازی جلوگیری شود؟

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

👤 Developix

💎 Channel: @DevelopixGame
❤1👍1
💠 نسخه جدید انجین یونیتی (Unity) منتشر شده است

🔸 ارتقا از نسخه 6000.3.21f1 به 6000.0.81f1

🔹 لیست تغییرات این نسخه:


🔖 #unity, #game, #release

💎 @DevelopixGame
👍2👎1
💠 نسخه جدید انجین یونیتی (Unity) منتشر شده است

🔸 ارتقا از نسخه 6000.0.81f1 به 6000.3.22f1

🔹 لیست تغییرات این نسخه:


🔖 #unity, #game, #release

💎 @DevelopixGame
کتابخانه‌ی Cinemachine در موتور Unity عملاً تبدیل شده به استاندارد دوربین‌های هوشمند در بازی‌ها؛ بدون این‌که لازم باشد برای هر حرکت دوربین کلی کُد سفارشی بنویسی. 🎮📷

مشکل چی را حل می‌کند؟
دوربین تعقیب کاراکتر، کات‌سین‌ سینمایی، لرزش هنگام شلیک، تمرکز روی چند هدف… همه‌اش با کلی Camera Controller دست‌نویس درنمی‌آید. Cinemachine یک سیستم کامپوننت‌محور می‌دهد که این رفتارها را ترکیب کنی.

ویژگی‌های مهم:
• Virtual Camera برای هر نما (تعقیب، ثابت، اوربیت و…)
• سیستم Priority و Blend برای کات و ترنزیشن نرم بین دوربین‌ها
• تنظیم خودکار Framing روی کاراکتر/هدف‌ها
• نویز و Shake آماده برای شلیک، انفجار، ضربه

نمونه استفاده ساده در C#:
// فرض: روی یک Virtual Camera کامپوننت CinemachineVirtualCamera داریم
using Cinemachine;
using UnityEngine;

public class FollowPlayer : MonoBehaviour
{
public Transform player;
void Start()
{
var vcam = GetComponent<CinemachineVirtualCamera>();
vcam.Follow = player;
vcam.LookAt = player;
}
}


برای شروع، پکیج را از Package Manager اضافه کن و چند Virtual Camera بساز؛ فقط با تغییر Priority می‌توانی بین نماها کات سینمایی بگیری. 🎬

مستندات رسمی:
Docs
GitHub

امتحانش روی پروژه‌ی بعدی ارزشش را دارد؛ مخصوصاً اگر همیشه درگیر اسکریپت دوربین هستی. 😉

🔖 #GameDev #بازیسازی #Unity #Cinemachine #Camera #GameDev #یونیتی #دوربین #Gameplay

👤 Developix

💎 Channel: @DevelopixGame
👍5
🔥 پروژه: ‏LÖVE 2D فریم‌ورک دوبعدی لوا

برای پروتوتایپ سریع بازی دوبعدی با Lua، فریم‌ورک LÖVE خیلی جمع‌وجور و خوش‌دست است 🎮

رندر 2D، ورودی، صدا، physics مبتنی‌بر Box2D و مدیریت پنجره را یک‌جا می‌دهد و روی ویندوز، لینوکس، macOS و حتی موبایل قابل اجراست. برای Game Jam، نمونه‌سازی مکانیک، یا آموزش مفاهیم پایه گیم‌لوپ عالی جواب می‌دهد.

سورس و داک کاملش اینجاست:
github.com/love2d/love

⭐️ 8,648 ستاره

🔖 #GameDev #بازیسازی #توسعه‌دهندگان_بازی #گیم_دولوپمنت #فریم‌ورک_بازی_دوبعدی

💎 @DevelopixGame
❤1👍1
این کد کنترل شلیک تو بازی رو ببین، یه چیزی تو مدیریت Coroutineها و رویدادها بوی Memory Leak می‌ده 👀

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

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

👤 Developix

💎 Channel: @DevelopixGame
👍4