حرکت بازیکن نقش مهمی در جذابتر کردن بازیهای گودو دارد. نحوه اجرای آن را بیاموزید.
پیاده سازی حرکت بازیکن یک جنبه اساسی از ایجاد بازی های جذاب در موتور بازی گودو است. حرکت بازیکن به کاربران اجازه می دهد تا شخصیت ها را کنترل کنند، جهان های بازی را کشف کنند و با عناصر مختلف در محیط بازی تعامل داشته باشند.
راه اندازی بازی گودو
برای شروع، یک پروژه دو بعدی جدید در موتور بازی گودو ایجاد کنید. سپس، این مراحل را دنبال کنید تا حرکت بازیکن را به بازی خود اضافه کنید
با کلیک راست بر روی پنل FileSystem، سپس انتخاب New Folder و نامگذاری آن به Scenes، یک صحنه جدید ایجاد کنید. در داخل پوشه Scenes، کلیک راست کرده و یک صحنه 2 بعدی جدید ایجاد کنید. آن را با یک نام مناسب ذخیره کنید، به عنوان مثال، Player.tscn.
کد استفاده شده در این مقاله در این مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.
با کلیک بر روی دکمه Add Node و انتخاب CharacterBody2D از کتابخانه گره، یک گره CharacterBody2D به صحنه اضافه کنید.
با انتخاب گره CharacterBody2D، روی دکمه Add Child Node کلیک کنید تا CollisionShape2D اضافه شود. شکل CollisionShape2D را طوری تنظیم کنید که با ابعاد بازیکن مطابقت داشته باشد. برای سادگی می توانید از شکل مستطیل استفاده کنید.
سپس یک جزء Sprite2D را به گره CharacterBody2D اضافه کنید و یک sprite مناسب برای شخصیت بازیکن خود انتخاب کنید.
افزودن حرکت پخش کننده با استفاده از ورودی صفحه کلید
اکنون می توانید حرکت پخش کننده را با استفاده از ورودی صفحه کلید به اسکریپت Player.gd اضافه کنید.
گره CharacterBody2D را گسترش دهید، سرعت حرکت را تنظیم کنید و ورودی را از کلیدهای جهت دار (ui_left، ui_right، ui_up، ui_down) دریافت کنید. سرعت حرکت را بر اساس جهت ورودی محاسبه کنید، آن را نرمال کنید و سپس با استفاده از تابع move_and_collide در روش _physics_process، پخش کننده را حرکت دهید.
extends CharacterBody2D
var speed = 300
func _physics_process(delta):
var input_dir = Vector2.ZERO
if Input.is_action_pressed("ui_left"):
input_dir.x -= 1
if Input.is_action_pressed("ui_right"):
input_dir.x += 1
if Input.is_action_pressed("ui_up"):
input_dir.y -= 1
if Input.is_action_pressed("ui_down"):
input_dir.y += 1
velocity = input_dir.normalized() * speed
move_and_collide(velocity * delta)
اضافه کردن چرخش
برای اینکه بازیکن در جهت حرکت قرار بگیرد، می توانید چرخش را به پخش کننده خود اضافه کنید. اسکریپت Player.gd را به صورت زیر به روز کنید:
extends CharacterBody2D
@export var speed = 400
@export var rotation_speed = 1.5
var rotation_direction = 0
func get_input():
rotation_direction = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
velocity = transform.x * (Input.get_action_strength("ui_up") - Input.get_action_strength("ui_down")) * speed
func _physics_process(delta):
get_input()
rotation += rotation_direction * rotation_speed * delta
move_and_slide()
بازیکن در جهت حرکت می چرخد. سرعت چرخش را می توان با استفاده از متغیر rotation_speed تنظیم کرد.
اضافه کردن حرکت بازیکن با استفاده از ورودی ماوس
اکنون، میتوانید با استفاده از ورودی ماوس، حرکت پخشکننده را پیادهسازی کنید تا بازیکن را به موقعیت کلیک ماوس منتقل کنید یا بازیکن را رو به نشانگر ماوس قرار دهید:
extends CharacterBody2D
@export var speed = 300
func _physics_process(delta):
if Input.is_action_just_pressed("click"):
var target_position = get_global_mouse_position()
var direction = (target_position - global_position).normalized()
velocity = direction * speed * delta
move_and_collide(velocity)
در این کد، هر زمان که عمل کلیک فعال شود، بازیکن به سمت موقعیت کلیک ماوس حرکت می کند. سرعت بازیکن را می توان با استفاده از متغیر سرعت کنترل کرد.
علاوه بر این، شما همچنین می توانید چرخش مبتنی بر ماوس را به صورت زیر پیاده سازی کنید:
extends CharacterBody2D
func _physics_process(delta):
var mouse_position = get_global_mouse_position()
var target_direction = (mouse_position - global_position).angle()
rotation = target_direction
در این نسخه، جن بازیکن مستقیماً با موقعیت نشانگر ماوس روبرو خواهد شد.
از جمله ویژگی های اضافی
در حالی که حرکت اولیه بازیکن برای اکثر بازی ها ضروری است، افزودن ویژگی های اضافی می تواند تجربه بازیکن شما را به سطح بالاتری برساند. در اینجا چند ویژگی هیجان انگیز وجود دارد که می توانید در بازی خود پیاده سازی کنید تا حرکت بازیکن را افزایش دهید:
پریدن
پیادهسازی مکانیک پرش به بازیکنان این امکان را میدهد تا از موانع عبور کنند، به پلتفرمهای بالاتر برسند و یک لایه تعاملی اضافی به دنیای بازی اضافه کنند. می توانید ارتفاع پرش را کنترل کنید و انیمیشن هایی اضافه کنید تا از نظر بصری جذاب شود.
داش یا اسپرینت
قابلیت خط تیره به بازیکن اجازه می دهد برای یک انفجار کوتاه به سرعت حرکت کند، که می تواند برای فرار از دشمنان یا عبور از مناطق چالش برانگیز مفید باشد. این ویژگی یک عنصر پویا به گیم پلی بازی اضافه می کند و حس کنترل بازیکن را افزایش می دهد.
کشویی و بالا رفتن از دیوار
معرفی مکانیک های کشویی و بالا رفتن از دیوار، بازیکنان را قادر می سازد تا با سطوح عمودی تعامل داشته باشند. بازیکنان می توانند از دیوارها به پایین بلغزانند، پرش های دیواری انجام دهند یا حتی موانع خاصی را کاهش دهند. این ویژگی در بازی های پلتفرمر بسیار محبوب است.
مکانیک پلتفرمر
برای بازیهای پلتفرمر، میتوانید گرانش، شتاب و کاهش سرعت را برای ایجاد یک تجربه حرکتی صاف و واقع بینانه ترکیب کنید. تنظیم دقیق این مکانیکها میتواند بازی را جذابتر و لذتبخشتر کند.
به یاد داشته باشید، کلید اجرای موفقیت آمیز ویژگی های اضافی در ایجاد تعادل و ادغام یکپارچه آنها در گیم پلی نهفته است. هر ویژگی باید مکانیزم حرکت بازیکن اصلی را تکمیل کند و به تجربه کلی بازی کمک کند.
بهترین روش ها برای اضافه کردن حرکت بازیکن
وقتی نوبت به اجرای حرکت بازیکن در بازی گودو میرسد، پیروی از این بهترین روشها نه تنها کد شما را پاکتر و کارآمدتر میکند، بلکه به تجربه بهتر بازیکن کمک میکند:
نگرانی های جداگانه
منطق حرکت پخش کننده خود را در توابع یا اسکریپت های جداگانه سازماندهی کنید. به عنوان مثال، یک اسکریپت برای مدیریت ورودی بازیکن، یک اسکریپت دیگر برای حرکت شخصیت و احتمالاً یک اسکریپت دیگر برای مدیریت انیمیشن ها ایجاد کنید.
تفکیک نگرانیها کد شما را ماژولارتر و نگهداری آسانتر میکند، و همچنین همکاری بهتری را بین اعضای تیم ترویج میکند.
از Delta Time استفاده کنید
هنگام محاسبه حرکت، همیشه مقادیر خود را در زمان دلتا (مثلث) ضرب کنید تا از حرکت صاف در نرخ فریم های مختلف اطمینان حاصل کنید. زمان دلتا نشان دهنده زمان سپری شده از آخرین فریم است و تضمین می کند که پخش کننده بدون توجه به عملکرد دستگاه با سرعت ثابت حرکت می کند.
محدود کردن سرعت حرکت
حداکثر سرعت حرکت را برای پخش کننده خود تنظیم کنید تا از حرکت ناخواسته با سرعت بالا جلوگیری کنید. این محدودیت می تواند برای جلوگیری از شکستن فیزیک بازی یا مواجه شدن با مشکلات تشخیص برخورد توسط بازیکنان مفید باشد.
لایه های فیزیک و ماسک های برخورد را در نظر بگیرید
گودو به شما اجازه می دهد لایه های برخورد و ماسک ها را برای اشیاء مختلف در بازی خود پیکربندی کنید. تنظیم صحیح این لایه ها و ماسک ها به شما این امکان را می دهد که کنترل کنید کدام اشیاء می توانند با یکدیگر در حین حرکت تعامل داشته باشند. به عنوان مثال، ممکن است بخواهید بازیکن با اجسام جامد برخورد کند اما از اجسام غیر جامد عبور نکند.
بازخورد بصری و صوتی را اضافه کنید
جلوه های بصری و نشانه های صوتی را برای ارائه بازخورد به بازیکنان در حین حرکت پیاده سازی کنید. به عنوان مثال، افزودن ذرات گرد و غبار هنگام دویدن پخشکننده یا صدای پا میتواند حس غوطهور شدن و درگیری را افزایش دهد.
درگیر کردن بازی های گودو با حرکت بازیکنان
مکانیک های حرکتی سیال و پاسخگو می توانند به طور قابل توجهی تجربه کلی بازیکن را بهبود بخشند. خواه کاوش در دنیایی وسیع، طفره رفتن از دشمنان یا حل معماها باشد، حرکت روان بازیکن غوطه ور شدن را افزایش می دهد و بازیکنان را درگیر نگه می دارد.
با پیاده سازی حرکت بازیکن با استفاده از GDScript و گره CharacterBody2D، می توانید تجربه های پویا و لذت بخشی از گیم پلی ایجاد کنید. توانایی حرکت آزادانه و تعامل با دنیای بازی به بازیکنان قدرت میدهد و باعث میشود که آنها با محیط مجازی ارتباط برقرار کنند.
سوالات متداول
س: اکنون بازیکن من در حال حرکت است، چگونه می توانم برای برخورد بررسی کنم؟
می توانید از موتور فیزیک داخلی استفاده کنید و تابع move_and_collide() را برای تشخیص برخورد بین اشیاء در گودو فراخوانی کنید.
س: در مورد Movement Player in Unity، آیا این یک فرآیند مشابه است؟
شما کد خود را در سی شارپ می نویسید و به صورت سه بعدی کار می کنید، اما حرکت اصلی بازیکن در Unity در غیر این صورت تقریباً مشابه است.
س: و در کتابخانه Arcade Python چطور؟
به حالت دو بعدی برگردید، و هنگامی که بر گودو مسلط شدید، حرکت بازیکن در Arcade ساده خواهد بود.