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

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

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
💠 نسخه جدید انجین یونیتی (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
الگوی Observer توی بازی‌سازی یکی از بهترین راه‌ها برای جدا کردن سیستم‌ها از هم و جلوگیری از وابستگی‌های درهم‌برهمه 🔁

به‌جای این‌که هر اسکریپت مستقیم بره سراغ بقیه، فقط به یک «رویداد» گوش می‌دهد. این رویکرد توی پروژه‌های متوسط و بزرگ یونیتی، دیباگ و تغییر گیم‌پلی رو خیلی راحت‌تر می‌کند.

مسئله‌ٔ رایج:
مثلاً وقتی بازیکن سکه می‌گیرد:
- اسکور باید زیاد شود
- صدا پخش شود
- یوآی آپدیت شود
اگر اسکریپت سکه مستقیماً سه کلاس مختلف را صدا بزند، هر تغییر کوچکی مساوی است با ویرایش چند جای متفاوت در کد 😵‍💫

با الگوی Observer فقط یک رویداد فراخوانی می‌شود و بقیه سیستم‌ها خودشـان «مشترک» آن رویداد هستند.

نمونه‌ٔ ساده در یونیتی (C#)
using UnityEngine;
using System;

public class GameEvents : MonoBehaviour
{
public static GameEvents Instance;
public event Action<int> OnCoinCollected;

void Awake()
{
Instance = this;
}

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


فرستنده‌ٔ رویداد (مثلاً روی Coin):
public class Coin : MonoBehaviour
{
public int amount = 1;

void OnTriggerEnter(Collider other)
{
GameEvents.Instance.CoinCollected(amount);
Destroy(gameObject);
}
}


دریافت‌کننده‌ها (Observerها):
public class ScoreSystem : MonoBehaviour
{
int score;

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

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

void HandleCoin(int amount)
{
score += amount;
}
}


همین الگو را می‌توان برای سیستم یوآی، افکت صوتی یا حتی آنالیتیکس هم استفاده کرد، بدون این‌که اسکریپت Coin درباره‌ٔ آن‌ها چیزی بداند 🎯

چند نکته‌ٔ عملی:
- توی صحنه‌های بزرگ، به‌جای Singleton ساده، از ScriptableObject Event یا سیستم Event Bus تمیزتر استفاده می‌شود (ارجاع: "Game Programming Patterns" و داکیومنت یونیتی درباره‌ٔ ScriptableObject).
- حتماً در OnDisable از رویدادها لغو عضویت شود تا Memory Leak یا خطای Null Reference در سوییچ صحنه پیش نیاید.

برای مطالعه‌ٔ بیشتر:
Game Programming Patterns - Observer
Unity Learn

از پروژه‌ٔ بعدی، سیستم رویداد گیم‌پلی را جدا طراحی کن؛ معماری بازی تمیزتر و قابل‌گسترش‌تر می‌شود 🚀

🔖 #GameDev #بازیسازی #Observer #Unity #CSharp #GameArchitecture #Events #CleanCode

👤 Developix

💎 Channel: @DevelopixGame
❤2👍1
🔥 پروژه: اُپن‌ایج؛ موتور بازمتن Age of Empires II

اگر روی RTS کار می‌کنی یا همیشه می‌خواستی بدانـی Age of Empires II زیر کاپوت چطور کار می‌کند، پروژهٔ openage خیلی به‌درد می‌خورد 🎮

این یک موتور بازمتن است که منطق AoE2 را بازپیاده‌سازی می‌کند؛ کراس‌پلتفرم، داده‌محور و مناسب بررسی طراحی سیستم‌های واحدها، pathfinding و بالانس.

برای الهام گرفتن از معماری، ساخت prototype RTS یا تمرین Modding گزینهٔ جذابی است. سورس و مستنداتش اینجاست:
github.com/SFTtech/openage

⭐️ 14,437 ستاره

🔖 #GameDev #بازیسازی #توسعه‌دهندگان_بازی #Game_Development #موتور_بازی

💎 @DevelopixGame
🔥4
پروژه: موتور بازی سازی توت فرنگی (موتور بازی‌سازی دو بعدی و چندسکویی بر پایه دات‌نت)

موتور بازی سازی توت فرنگی یک موتور نگاشته شده در زبان C# مبتنی بر پلتفرم dotnet است که امکان ساخت بازی های دو بعدی را در با استفاده از سیستم اجزاء (Component System) می دهد
نسخه اولیه این موتور جهت تست و رفع اشکال در قالب یک فریمورک برنامه نویسی منتشر شده و فاقد ادیتور می باشد

شما می توانید با استفاده از این نسخه اولی در زبان سی شارپ بازی های خود را بسازید، این نسخه کاملا متن باز می باشد

سایت موتور:
sb-engine.ir
لینک سورس روی گیت هاب:
https://github.com/koosha72/strawberry

لینک سورس روی گیت محلی:
git.sb-engine.ir

لینک پکیج منیجر محلی:
nuget.sb-engine.ir

@strawberry_engine

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

👤 کوشا

💎 Channel: @DevelopixGame
❤4👍1
🎮 حرکت نرم، بدون زبالهٔ اضافه

اگر کاراکتر در هر فریم کمی مکث می‌کند، فقط سراغ فیزیک نرو؛ ساختن مداوم آبجکت هم می‌تواند باعث فعالیت بیشتر Garbage Collector شود. در یونیتی، حرکت ساده را می‌شود بدون تخصیص آرایه یا لیست تازه در هر فریم نوشت.

🛠 این نمونه جهت ورودی را می‌گیرد و حرکت را با زمان فریم هماهنگ می‌کند:

using UnityEngine;

public class SimpleMover : MonoBehaviour
{
[SerializeField] float speed = 5f;

void Update()
{
float x = Input.GetAxisRaw("Horizontal");
float z = Input.GetAxisRaw("Vertical");
Vector3 direction = new Vector3(x, 0f, z).normalized;
transform.position += direction * speed * Time.deltaTime;
}
}


💡 اینجا Vector3 یک ساختار مقداری است؛ ساختنش به‌تنهایی تخصیص حافظه روی heap ایجاد نمی‌کند. نرمال‌سازی هم نمی‌گذارد حرکت مورب از حرکت مستقیم سریع‌تر شود. اگر از Rigidbody استفاده می‌کنی، جابه‌جایی فیزیکی را با روش مناسب فیزیک انجام بده، نه با تغییر مستقیم transform.position.

این الگو را روی حرکت ساده امتحان کن و هنگام بررسی افت فریم، بخش GC Alloc را در Profiler هم ببین. 🔍

📚 راهنمای رسمی یونیتی دربارهٔ تخصیص حافظه

🔖 #GameDev #بازیسازی #Unity #GC #Vector3 #GameDev

👤 Developix

💎 Channel: @DevelopixGame
❤2👍1