گودو گیم دو، بلاگ بازی سازی با انجین گودو Godot

گودو گیم دو، بلاگ آموزشی و اطلاع رسانی انجین بازی سازی گودو (Godot) است. در این بلاگ مطالب زیادی درباره انجین گودو و بازی سازی یاد میگیرید.

آشنایی با سیگنال‌ها در انجین گودو

مفاهیمی که در این مطلب پوشش داده میشن:

  • معرفی نود button
  • نحوه ایجاد و اتصال یک اسکریپت به یک نود
  • نحوه ایجاد یه سیگنال و اتصال به یک نود دیگر

سیگنال‌ها در انجین گودو مفهوم و ابزار مهمی هستن. حتی انجین‌های دیگه بازی سازی و حتی نرم‌افزارهای دیگه برنامه نویسی هم به نوعی از سیگنال‌ها استفاده میکنن. فقط اسم‌های متفاوتی دارن.سیگنال‌ها اونقدر در ساخت بازی مهم هستند که تقریبا میشه مطمئن بود هیچ بازی ای ساخته نمیشه مگه اینکه در اون از سیگنال‌ها استفاده بشه. حالا این سیگنال چی هست؟! من سعی میکنم در این مطلب مفهوم اون رو جا بندازم و با یه مثال ساده روش استفاده از اون رو بهتون نشون بدم.

سیگنال در گودو، نوعی پیامه که از یک بخش به بخش دیگه ارسال میشه و وقوع یه رویداد رو اطلاع میده. سیگنال ها به رویدادها مرتبط هستن. برای مثال، وقتی وقتی یه تایمر، زمانش به آخر میرسه یا وقتی یه دکمه فشرده میشه یه رویداد رخ داده یا یه اتفاق افتاده. توی گودو هر نود دارای چند سیگنال پیشفرضه که هر کدوم یه اتفاق رو درباره اون نود مخابره میکنن به نود دیگه، هر نودی که شما بخواید. در واقع سیگنال‌ها یه فرستنده دارن و یه گیرنده. در آینده وقتی کاملا با سیگنال‌ها آشنا شدید، خواهید دید که قابلیت‌های خیلی زیادی دارن و تقریبا هر رویدادی، حتی تغییر یه متغیر میتونه یه سیگنال باشه. 

من در این مطلب، میخوام یک دکمه ایجاد کنم، و سیگنال فشرده شدن دکمه رو به نود والدش وصل کنم، به این معنی که هر وقت دکمه فشرده میشه یه اتفاقی بیفته. تو این مطلب هنوز از کدنویسی خبری نیست و فقط اتصال سیگنال رو بهتون نشون میدم.

حالا شروع کنیم. یه پروژه گودو ایجاد کنید. قبلا یاد گرفتید. و یه نود دوبعدی و یه صحنه دوبعدی ایجاد کنید. روی node2D کلیک راست و گزینه add child node رو انتخاب کنید. از میون نودها Button رو انتخاب کنید. button یه دکمه سادست که معمولا یه متن روش داره.

بیاید نگاهی به سیگنال‌های button بندازیم. در سمت راست برنامه گودو یه تب به اسم node هست و زیر مجموعه اون یه تب دیگه به اسم signals. (یه تب دیگه به اسم group هم هست که بعدا توضیح میدم). از سمت چپ تصویر توی تب scene، button رو انتخاب کنید و بعد سمت راست، از تب نود، signal رو انتخاب کنید.

می‌بینید که دکمه یا button تعدادی سیگنال داره، وقتی دکمه پایینه، وقتی دکمه بالاست، وقتی دکمه فشرده شده، وقتی دکمه رها شده و ...

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

وقتی روی نود در تب scene کلیک میکنیم، بالای تب یه دکمه با یه اضافه سبز ظاهر میشه. کار این دکمه اضافه کردن و اتصال یه اسکریپت به نود انتخاب شدست. روی اون دکمه کلیک کنید:

بلافاصله یه پنجره باز میشه که از طریق اون یه اسکریپت ایجاد میکنید. این پنجره گزینه هایی داره که الان وقت توضیح دادنش نیست. وقتی این رو بگم که وقتی برای یه نود اسکریپت ایجاد میکنید به طور پیشفرض اسکریپتی مناسب همون نود ساخته میشه مگر اینکه شما چیز دیگه ای بخواید. نگرااز پنجره باز شده گزینه create رو بزنید.

دقت کنید که الان کنار node2D ما در تب scene، یه آیکون طومار یا کاغذ ظاهر شد. این یعنی نود مورد نظر دارای اسکریپت است. حالا وقتشه که سیگنال button رو به node2D وصل کنیم( یا از button به node2d یه پیام مخابره کنیم).

همون طور که بهتون نشون دادم button  رو انتخاب کنید. به بخش سیگنالها برید. سیگنال ()pressed رو انتخاب کنید و روی اون دابل کلیک کنید. یه پنجره باز میشه که اونجا باید نود Node2D  رو انتخاب کنید و دکمه connect رو کلیک کنید.

تموم شد. سیگنال متصل شد. حالا اگه button رو انتخاب کنید و به قسمت سیگنالها برید خواهید دید که کنار سیگنال pressed یه فلش سبز هست که نشون میده سیگنال به جایی وصله. 

حالا توجهتونو به این قسمت جلب میکنم. یه صفحه برای شما باز میشه که اسکریپت مربوط به نود Node2D ست و یه تابع یا فانکشن توش هست به اسم

func _on_button_pressed():
	pass #replace with function body.

 

میخوام به چند چیز دقت کنید. بالای صفحه از تب 2D به script جابجا شدیم. وارد محیط اسکریپت نویسی شدیم و اسکریپت نود Node2D برامون باز شده.توی اون قسمت کد که هایلایت کردم کدی رو مینویسید که وقتی روی دکمه button کلیک میکنید میخواید اجرا بشه. 

خوب الان در آستانه شروع کدنویسی هستیم.در مطالب آینده نکته هایی در باره کدنویسی گودو بهتون خوام گفت. 

سیگنال‌ها اهمیت زیادی دارن. سعی کنید خوب یادش بگیرید. 

 

 

 

 

  • 2 نظر
  • 1 پسند
    • danial abdl
    • 18:17 1402/07/11

    چند اصطلاح رایج بازی سازی با انجین گودو

    امروز میخوام چند اصطلاح رایج که توی بازی سازی به کار میره براتون به طور کاربردی توضیح بدم. توی همین بلاگ در آینده از این اصطلاح ها بیشتر استفاده میشه. 

    • UI یا رابط کاربری: اجزا و لایه ای از بازی که انسان از طریق اون با بازی شما ارتباط برقرار میکنه. دکمه ها، متن هایی که اطلاعاتی رو از طریق اونها به کاربر نشون میدید، چک باکس ها، نوارهای پیشرفت و... شامل رابط کاربری میشن. توی انجین گودو، معمولا نودهای رابط کاربری به رنگ سبز هستند و زیر مجموعه نود control قرار دارن. 
    • گیم دیزاین (Game design): قبل از این که هیچ کدی نوشته باشه، هیچ آرتی برای بازی ساخته بشه و هیچ بازی قابل بازی ای وجود داشته باشه، بازی از روی یک ایده اولیه طراحی میشه، یعنی درباره همه چیز بازی فکر میشه، از سبک آرت، تا سبک خود بازی، مراحل، داستان، رابط کاربری، مدت زمان بازی و هر جزئیاتی که برای ساخت بازی لازمه. تا این حد بگم که تصمیم گیری در این باره که وقتی بازیکن دکمه حرکت رو فشار میده، موقعی که دستشو روی دکمه میذاره بهتره حرکت شروع بشه یا موقعی که دستشو از روی دکمه برمیداره؟ کدوم برای بازی شما مناسبتره؟ معمولا این جزئیات نوشته میشه و بهتر هم هست که نوشته بشه. ولی ممکنه توی ذهن شما باشه. لازمه اینو بگم که فرایند طراحی بازی یه فرایند چرخه ماننده و این طور نیست که از نقطه صفر شروع کنید و به نقطه صد برسید. خیلی وقتها لازمه برگردی و چیزی که قبلا طراحی کنی تغییر بدی و بعضی چیزها در حین کار مشخص میشه. 
    • اسکریپت و اسکریپت نویسی: همون بخش برنامه نویسی بازی سازیه. توی انجین گودو، به یه قطعه کد میگن اسکریپت که با پسوند "gd." ذخیره میشه و اسکریپت، معمولا به یه نود متصل میشه و یه مجموعه از کارها رو انجام میده. به طور معمول اسکریپت ها توی گودو یا به زبان gd script هستند یا سی شارپ (#c).
    • نود (Node) : قبلا توضیح دادم، نود مفهوم مهمی توی انجین گودوست. هر آبجکت یا قطعه یا موجودیتی توی بازی شما از اجزائی ساخته شده. مثلا اگه کاراکتری دارید که راه میره، تصویر کاراکتر یا اسپرایت یه جزءاونه، بخشی که انیمیشن کاراکترو کنترل میکنه، یه جزئه، بخش شناسایی برخورد با زمین و چیزهای دیگه یه جزئه، به هر کدوم از اینها میگن یک نود. 

    اصطلاحات خیلی بیشتری وجود داره ولی این چندتا برای شروع و توی مطالب آینده لازم بود.

  • 0 نظر
  • 2 پسند
    • danial abdl
    • 09:05 1402/07/10

    ایجاد یک پروژه جدید در گودو و قدم های اول

    سلام به همه بازی سازهای با انگیزه

    توی این پروژه قصد دارم یه موضوع ابتدایی و مهم رو بهتون آموزش بدم. ایجاد یک پروژه جدید در انجین گودو و اولین کارهایی به طور معمول باید انجام داد و توصیه من اینه که به این روش عمل کنید.

    فرض کنیم گودو رو دانلود کردید و اون رو باز میکنید. اولین چیزی که جلوی شما ظاهر میشه اینه:

    این جا میتونید پروژه های خودتون رو مدیریت کنید و پروژه جدید ایجاد و چند کار دیگه هم میتونید انجام بدید که در درسهای آینده بهشون میپردازیم.

    الان میخوایم یه پروژه جدید ایجاد کنیم. روی گزینه new project کلیک کنید. حالا پنجره ای به این شکل ظاهر میشه:

    به قسمت های های هایلایت شده دقت کنید. میتونید خیلی ساده دکمه create folder رو بزنید و بعد پایین صفحه دکمه create & edit رو بزنید و پروژه رو بسازید. اما من پیشنهاد میکنم کار بهتری کنید. 

    توصیه من به شما اینه که حتما توی کامپیوتر خودتون یک فولدر داشته باشید به اسم "پروژه های گودو" یا "Godot projects" یا هر اسمی مشابه این ها. هدف اینه که همه پروژه هاتون یک جا جمع بشن و سردرگم نشید. نظم یک عنصر خیلی مهم توی کار بازی سازیه. 

    رو گزینه browse کلیک کنید.

    درایو مورد نظر رو انتخاب کنید. و در مکانی که مناسب میدونید، فولدر برای مثال Godot projects رو باز کنید. داخل اون فولدر یک فولدر دیگه به نام my project ایجاد کنید و در نهایت گزینه select current folder به معنای انتخاب فولدر فعلی رو انتخاب کنید.

    گودو شما به پنجره قبلی برمیگردونه. سمت چپ سه گزینه دارید:

    • +forward
    • mobile
    • compatibility

    زیاد شما درگیر تفاوت این سه گزینه نمیکنم. اگه برای کامپیوتر بازی میسازید گزینه اول رو انتخاب کنید. اگه برای موبایل گزینه دوم و اگه با دو گزینه اول مشکل داشتید مثلا با خطا مواجه شدید یا سیستمی که باهاش کار میکنید قدیمیه گزینه سوم یعنی compatibility رو انتخاب کنید. اگر هم تردید دارید گزینه اول رو انتخاب کنید. الان خیلی این موضوع مهم نیست.

    خوب، پروژه ایجاد شد. ظاهر برنامه و پروژه در نگاه اول این شکلیه. به قسمت های هایلایت شده دقت کنید:

    قسمت سمت چپ بالا درخت صحنه یا Scene tree رو به شما نشون میده که فعلا خالیه. سمت چپ پایین هم فایل های پروژه شما رو نشون میده. در حال حاضر فقط یه آیکون یا عکس انجین گودو توش هست. 

    در این بخش یک توضیح ضروریه. یک پروژه و بازی گودو از صحنه های مختلف تشکیل شده. مثلا صفحه منوی شما یک صحنه یا scene هست. صفحه مراحل یک scene (با تلفظ سین) هست. و هر صحنه از یک سلسله مراتب نود (Node) تشکیل شده. نود رو فعلا اجزاء سازنده در نظر بگیرید. هر صحنه حداقل یک نود به عنوان سرشاخه یا نود اصلی داره. فعلا در همین حد یاد بگیرید. بعدا که بیشتر کار کردید بیشتر متوجه میشید.

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

    1. node2d برای ایجاد یک صحنه دوبعدی (برای بازی دوبعدی)
    2. node3d برای ایجاد یک صحنه سه بعدی (برای بازی سه بعدی)
    3. User Interface برای رابط کاربری مثل منوها، دکمه ها و ...
    4. other نودهای دیگر که شامل بالایی ها نیستن

    بیاید و گزینه node2d رو انتخاب کنید تا یک صحنه دوبعدی داشته باشید. وقتی که node2d رو انتخاب کنید سلسله مراتب صحنه تون به این شکل میشه:

    الان در صحنه شما فقط یک نود دوبعدی خالی هست. نود دوبعدی یا node2d معمولا کاربردش همینه که به عنوان سرشاخه باشه و زیر مجموعه هاش ماهیت صحنه رو تعریف کنن. 

    حالا یک کاری که بهتره انجام بدیم اینه صحنه مون رو ذخیره کنیم. از منو scene و بعد save scene رو انتخاب کنید و یک اسم برای صحنه انتخاب کنید و صحنه رو ذخیره کنید. من اسم main رو برای صحنه خودم گذاشتم:

    دقت کنید که در قسمت پایینی در file system که فایل ها رو نشون میده، صحنه ما اضافه شده:

    صحنه ها در گودو با پسوند tscn ذخیره میشن.

    یک قدم دیگه مونده. پروژه گودو همیشه یه صحنه به عنوان صحنه شروع کننده داره که باید اونو مشخص کنید. الان بالا صفحه سمت راست روی دکمه پلی کلیک کنید. برنامه از شما میخواید که صحنه اول رو انتخاب کنید. شما گزینه select current یعنی انتخاب صحنه فعلی رو انتخاب کنید.

    خواهید دید که بعد از چند ثانیه بازیتون اجرا میشه. یک صحنه خاکستری خالی. چقدر هیجان انگیز! بعدا قراره بهترین بازی ها توی این صحنه ساخته بشن.

    به این روش پروژه شما ساخته میشه و قدم های اولیه برداشته میشه. سعی کنید به پیشرفت پروژه به طور مرتب پروژه و صحنه های خودتون رو ذخیره کنید تا چیزی از دست نره.

    اگه براتون مفید بود یا نظری داشتید بهم بگید. 

  • 1 نظر
  • 2 پسند
    • danial abdl
    • 13:13 1402/07/07