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

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

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
‏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
در بازی‌سازی، مخصوصاً وقتی با فیزیک و حرکت سروکار داری، تکیه روی deltaTime ناپایدار (مثل Time.deltaTime در Unity) برای همه‌چیز، می‌تونه باعث بشه روی بعضی سیستم‌ها حرکت‌ها نرم باشن و روی بعضی دیگه لرزش و تفاوت رفتاری دیده بشه.

یک ترفند عملی اینه که فیزیک رو در یک Fixed Update Loop با گام زمانی ثابت نگه داری و فقط رندر و انیمیشن رو با فریم‌ریت متغیر آپدیت کنی. این‌طوری هم بازی نرم‌تر به نظر می‌رسه، هم فیزیک قابل‌تکرار و پایدار می‌مونه. 🚀

ایده ساده‌ست:

• یک حلقهٔ Game Loop داری که هر فریم اجرا می‌شه.
• یک متغیر زمان انباشته نگه می‌داری.
• هر بار که این زمان از fixedDelta گذشت، چندین بار UpdatePhysics رو اجرا می‌کنی تا عقب‌افتادگی جبران بشه.

نمونهٔ سادهٔ پیاده‌سازی (الگوی کلی، مستقل از موتور):

float accumulator = 0.0f;
const float fixedDelta = 0.02f; // 50Hz

void GameLoop()
{
while (gameRunning)
{
float dt = GetFrameTime(); // بر حسب ثانیه
accumulator += dt;

// به‌روزرسانی فیزیک با گام ثابت
while (accumulator >= fixedDelta)
{
UpdatePhysics(fixedDelta);
accumulator -= fixedDelta;
}

// رندر با استفاده از وضعیت فعلی
Render();
}
}


در Unity همین مفهوم از قبل پیاده‌سازی شده: هر چیزی که به فیزیک وابسته‌ست (نیرو، حرکت Rigidbody و …) بهتره داخل FixedUpdate انجام بشه و برای Input / انیمیشن / UI از Update استفاده بشه. این جداسازی روی دستگاه‌های ضعیف‌تر تفاوت خیلی محسوسی در ثبات حرکت ایجاد می‌کنه. 🎮

برای جزئیات بیشتر دربارهٔ FixedUpdate و Time سیستم در Unity:
https://docs.unity3d.com/Manual/FixedUpdateOrder.html

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

🔖 #GameDev #بازیسازی #GameLoop #deltaTime #Physics #Unity #Performance

👤 Developix

💎 Channel: @DevelopixGame
❤6🔥1
سرور اختصاصی تک‌نت؛ تحویل فوری، بدون قطعی ✅

🔹 پورت اختصاصی واقعی
🔹 آپلود رایگان
🔹 آپتایم 99.99% تضمینی
🔹 ارائه IP مازاد
🔹 پشتیبانی 24/7 (تیکت + آنلاین)
🔹 نصب سریع
🔹 پرداخت ماهیانه

⏳ ظرفیت محدود — همین الان تماس بگیر و سرویس رو رزرو کن:

📞 02191555530
🔗 https://taknet.ir/services/dedicated-server
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