چرا گودوت (Godot)؟ موتورِ بازیسازیِ مردمپسند!

چرا گودوت (Godot)؟ موتورِ بازیسازیِ مردمپسند!
قبل از شروع، باید بدانید چرا گودوت در سال ۲۰۲۶ اینقدر محبوب است:
1. **کاملاً رایگان (متنباز):** هیچ درصدی از فروش بازی شما را نمیگیرد.
2. **سبک و سریع:** کل نرمافزار حدود ۱۰۰ مگابایت است! (در حالی که رقبایش چندین گیگابایت هستند).
3. **دوکاره:** هم برای بازیهای ۲ بعدی (2D) بینظیر است و هم برای بازیهای ۳ بعدی (3D) کاملاً قدرتمند.
4. **زبانِ دوستانه:** از زبانی به نام **GDScript** استفاده میکند که بسیار شبیه به **پایتون** است؛ یعنی یادگیری آن برای مبتدیها بسیار ساده است.
---
نقشه راه: چطور اولین بازی موبایل خود را بسازیم؟
برای شروع بازیسازی در گودوت، این ۴ مرحلهی کلیدی را دنبال کنید:
گام اول: نصب و آشنایی با محیط (The Interface)
ابتدا گودوت را از سایت رسمیاش دانلود کنید. محیط آن از سه بخش اصلی تشکیل شده است:
* **Scene (صحنه):** همه چیز در گودوت یک «صحنه» است؛ کاراکتر، دشمن، یا حتی یک دکمه ساده.
* **Node (گره):** اجزای سازنده صحنه هستند (مثل یک عکس، یک صدای انفجار، یا یک محیط فیزیکی).
* **Inspector:** جایی که ویژگیهای هر گره را تغییر میدهید (مثلاً تغییر رنگ، اندازه یا سرعت حرکت).
#### گام دوم: یادگیری منطق بازی (GDScript)
شما نباید از کدنویسی بترسید. در گودوت، کدها به اشیاء جان میدهند. مثلاً برای حرکت دادن یک کاراکتر، فقط چند خط ساده مینویسید:
```gdscript
# اگر کلید راست زده شد، کاراکتر به راست حرکت کند
if Input.is_action_pressed("ui_right"):
position.x += speed * delta
```
این کد برای یک مبتدی کاملاً قابل درک است!
گام سوم: طراحی برای موبایل (Touch & Screen)
بازیهای موبایل با بازیهای کامپیوتری فرق دارند. در گودوت باید:
* **رزولوشن صفحه:** تنظیمات بازی را روی حالت "Stretch" بگذارید تا بازی شما روی همه گوشیها (آیفون یا اندروید) به درستی نمایش داده شود.
* **ورودی لمسی:** به جای کیبورد، از "Input Events" گودوت برای شناسایی ضربه انگشت روی صفحه استفاده کنید.
گام چهارم: خروجی گرفتن (Export)
وقتی بازی آماده شد، با استفاده از بخش "Export"، گودوت فایل شما را به فرمت `APK` برای اندروید یا `IPA` برای iOS تبدیل میکند.
---
۳ نکته طلایی برای حرفهای شدن در گودوت
1. **از کوچک شروع کنید:** اولین بازی خود را با ساخت یک بازی مثل "Flappy Bird" یا "پریدن از روی موانع" شروع کنید. سراغ ساخت بازیهای بزرگ نروید تا ناامید نشوید.
2. **از کتابخانههای آماده استفاده کنید:** در سایت [Godot Asset Library](https://godotengine.org/asset-library/)، هزاران کاراکتر، صدا و کدهای آماده وجود دارد که میتوانید رایگان دانلود و در بازیتان استفاده کنید.
3. **بهترین راه یادگیری (Learn by doing):** به جای دیدن ۱۰ ساعت تئوری، یک پروژه ۳۰ دقیقهای در یوتیوب پیدا کنید و همزمان با آن بسازید.
یک حقیقت جالب (Fun Fact):
آیا میدانستید بسیاری از بازیهای پرطرفدار گوشی که در مترو یا اتوبوس بازی میکنید، با همین موتور ساخته شدهاند؟ گودوت به دلیل حجم کم، به بازی شما اجازه میدهد خیلی سریع روی گوشی اجرا شود و باتری گوشی کاربر را هم زود خالی نمیکند!
حتما! بخش دوم آموزش گودوت را آماده کردهام که روی ساخت بازی تمرکز بیشتری دارد و نکات کاربردیتری را پوشش میدهد:
---
راهنمای گامبهگام ساخت بازی در گودوت (بخش دوم)
در بخش اول با کلیات گودوت آشنا شدیم. حالا وقت آن است که دستانمان را آلوده کنیم و اولین بازی واقعی خود را بسازیم! فرض کنیم میخواهیم یک بازی ساده سهبعدی (3D) بسازیم که در آن یک مکعب باید روی سکوها بپرد.
گام پنجم: ساخت دنیای بازی (The 3D Scene)
1. **ایجاد صحنه جدید:** یک صحنه سهبعدی جدید بسازید (`3D Scene`).
2. **اضافه کردن زمین (Floor):** یک `MeshInstance3D` اضافه کنید و در Inspector، برای آن یک `BoxMesh` (مکعب) بسازید. سپس اندازه آن را بزرگ کنید تا مثل یک زمین شود.
3. **اضافه کردن کاراکتر (Player Cube):** یک `MeshInstance3D` دیگر اضافه کنید و آن را به عنوان «کاراکتر» نامگذاری کنید. یک `BoxMesh` کوچک برایش بسازید. برای اینکه کاراکتر بتواند حرکت کند و با دنیای فیزیکی تعامل داشته باشد، یک `CharacterBody3D` هم به عنوان والد (Parent) برای این مکعب قرار دهید.
4. **اضافه کردن سکوها (Platforms):** چند `MeshInstance3D` دیگر اضافه کنید و آنها را مثل سکو در اطراف زمین قرار دهید.
گام ششم: کدنویسی برای حرکت (GDScript for Movement)
حالا به کاراکتر مکعب خود، یک اسکریپت GDScript اضافه کنید. این اسکریپت منطق حرکت و پرش را کنترل میکند:
```gdscript
# فرض کنید نام والد CharacterBody3D است
extends CharacterBody3D
@export var speed = 5.0 # سرعت حرکت
@export var jump_velocity = 4.5 # قدرت پرش
# تابع physics_process در هر فریم physics اجرا میشود
func _physics_process(delta):
# گرفتن ورودی از کاربر (مثلاً کلیدهای جهتنما)
var input_dir = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
# محاسبه جهت حرکت بر اساس دوربین (اگر دوربین داشته باشیم)
# ... (این قسمت پیچیدهتر است و برای شروع لازم نیست)
# اعمال گرانش
if not is_on_floor():
velocity.y -= gravity * delta # gravity باید تعریف شده باشد
# پرش
if Input.is_action_just_pressed("ui_up") and is_on_floor():
velocity.y = jump_velocity
# حرکت افقی
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * speed
velocity.z = direction.z * speed
else:
velocity.x = move_toward(velocity.x, 0, speed)
velocity.z = move_toward(velocity.z, 0, speed)
move_and_slide() # این تابع خود حرکت را اعمال میکند
**نکته جالب:** در کد بالا، `@export` به شما اجازه میدهد تا متغیرهایی مثل `speed` و `jump_velocity` را مستقیماً از داخل محیط گودوت (Inspector) تنظیم کنید، بدون اینکه نیاز باشد کد را دوباره ویرایش کنید!
گام هفتم: افزودن دوربین (The Camera)
یک `Camera3D` به صحنه اضافه کنید. معمولاً این دوربین را زیرمجموعه کاراکتر قرار میدهند تا با او حرکت کند. برای اینکه دوربین پشت سر کاراکتر بماند، کمی آن را عقب ببرید و بچرخانید.
گام هشتم: اضافه کردن فیزیک و برخورد (Physics & Collisions)
* **برای زمین و سکوها:** هر کدام از اینها باید یک `StaticBody3D` و یک `CollisionShape3D` داشته باشند تا گودوت بفهمد اینها اجسام سختی هستند که کاراکتر نمیتواند از آنها عبور کند.
* **برای کاراکتر:** همانطور که گفته شد، `CharacterBody3D` و `CollisionShape3D` (معمولاً یک `BoxShape3D`) برای کاراکتر لازم است تا بتواند با زمین و سکوها برخورد کند.
گام نهم: مدیریت صحنهها و انتقال (Scene Management)
* **صحنه اصلی:** صحنهای که الان ساختهاید را به عنوان صحنه اصلی (`Main Scene`) ذخیره کنید.
* **انتقال بین مراحل:** اگر بازی شما مراحل مختلف دارد، میتوانید با کدنویسی، یک صحنه را بارگذاری و صحنه قبلی را حذف کنید.
نکته حرفهای: استفاده از "Signals" (سیگنالها)
یکی از زیباترین ویژگیهای گودوت، سیستم سیگنال آن است. فرض کنید کاراکتر شما به بالای سکو میرسد. سکو میتواند یک «سیگنال» (مثل یک پیام) بفرستد که «من توسط کاراکتر لمس شدم!». سپس کاراکتر شما این پیام را دریافت کرده و مثلاً امتیاز شما را افزایش میدهد یا باعث میشود سکو ناپدید شود. این کار باعث میشود کدها بسیار تمیز و سازمانیافته شوند.
برنامه نویسی گودوت آموزش بازی سازی آموزش گودوت موتور بازی سازی



