بسیاری از بازی ها شامل نوعی دشمن برای نبرد هستند. راههای مختلفی را که میتوانید به مبارزه با دشمن اضافه کنید و آن را زیباتر کنید، کاوش کنید.
دشمنان نقش مهمی در هیجان انگیز و چالش برانگیز کردن بازی برای بازیکنان دارند. چه در حال ایجاد یک پلتفرمر دوبعدی، یک تیراندازی از بالا به پایین یا یک بازی نقش آفرینی باشید، افزودن دشمنان می تواند تجربه گیم پلی را به میزان قابل توجهی افزایش دهد.
رابط کاربر پسند گودو و زبان برنامه نویسی بصری، GDScript، فرآیند را کارآمد و لذت بخش می کند.
راه اندازی بازی گودو
قبل از غواصی در ساخت دشمن، ساختار اصلی بازی دو بعدی خود را در موتور بازی گودو تنظیم کنید.
یک پروژه دو بعدی جدید در گودو ایجاد کنید. در صحنه اصلی، یک گره KinematicBody2D جدید ایجاد کنید و نام آن را Player بگذارید. در داخل گره پخش کننده، یک CollisionShape2D با شکل مستطیل اضافه کنید، که هیت باکس پخش کننده خواهد بود. همچنین یک گره Sprite را به عنوان نمایش بصری شخصیت بازیکن اضافه کنید.
کد استفاده شده در این مقاله در این مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.
کد GDScript زیر را به گره Player وصل کنید تا حرکت اولیه فعال شود:
extends KinematicBody2D
const SPEED = 200
func _physics_process(delta):
var motion = Vector2.ZERO
if Input.is_action_pressed("ui_right"):
motion.x += SPEED
if Input.is_action_pressed("ui_left"):
motion.x -= SPEED
if Input.is_action_pressed("ui_down"):
motion.y += SPEED
if Input.is_action_pressed("ui_up"):
motion.y -= SPEED
motion = move_and_slide(motion)
با این کد، بازیکن می تواند با استفاده از کلیدهای جهت دار یا کلیدهای WASD به چپ، راست، بالا و پایین حرکت کند.
ایجاد یک دشمن ساده
اکنون که یک شخصیت بازیکن تنظیم کرده اید، می توانید یک دشمن ساده ایجاد کنید.
یک صحنه جدید ایجاد کنید و یک گره StaticBody2D به نام Enemy اضافه کنید. در داخل گره دشمن، یک گره CollisionShape2D با شکل دایره ای اضافه کنید تا هیت باکس دشمن را مشخص کنید. همچنین یک گره Sprite برای نمایش بصری دشمن اضافه کنید.
با تنظیم برخورد، دشمن آماده تعامل با بازیکن و سایر عناصر در دنیای بازی شما خواهد بود.
ساختن یک دشمن دنبال بازیکن
ایجاد دشمنانی که بازیکن را دنبال می کنند، سطح جدیدی از چالش را به بازی اضافه می کند.
یک صحنه جدید برای نوع دشمن زیر ایجاد کنید و یک گره KinematicBody2D به نام FollowEnemy با یک CollisionShape2D اضافه کنید. کد GDScript زیر را به گره FollowEnemy ضمیمه کنید تا از پخش کننده پیروی کند:
extends KinematicBody2D
const SPEED = 100
func _physics_process(delta):
var player = get_parent().get_node("Player")
var player_position = player.global_position
var enemy_position = global_position
var direction = player_position - enemy_position
direction = direction.normalized()
var motion = direction * SPEED * delta
move_and_collide(motion)
اکنون، FollowEnemy به سمت موقعیت بازیکن در هر فریم حرکت می کند.
اضافه کردن گلوله های دشمن
اکنون می توانید کاری کنید که دشمن گلوله هایی را به سمت بازیکن شلیک کند. یک صحنه جدید ایجاد کنید و نام آن را Bullet.tscn بگذارید. یک گره KinematicBody2D به صحنه اضافه کنید. اسکریپت Bullet.gd را به گره KinematicBody2D در صحنه Bullet.tscn وصل کنید. کد زیر را برای تعریف کلاس Bullet اضافه کنید:
extends KinematicBody2D
const BULLET_SPEED = 300
var bullet_direction = Vector2.ZERO
func _physics_process(delta):
var motion = bullet_direction * BULLET_SPEED * delta
move_and_collide(motion)
func set_direction(direction):
bullet_direction = direction.normalized()
حالا با گلوله یک گره جدید برای دشمن ایجاد کنید و نام آن را ShootingEnemy بگذارید. در داخل گره ShootingEnemy، یک گره CollisionShape2D با شکل مستطیل به عنوان ضربهباکس اضافه کنید.
کد GDScript زیر را به گره ShootingEnemy وصل کنید تا گلوله شلیک کند:
extends KinematicBody2D
const SPEED = 100
const SHOOT_DELAY = 1.5
var shoot_timer = SHOOT_DELAY
# Import the Bullet scene
const BulletScene = preload("res://Bullet.tscn")
func _physics_process(delta):
# Shooting logic
shoot_timer -= delta
if shoot_timer <= 0:
shoot_timer = SHOOT_DELAY
var bullet_instance = BulletScene.instance()
bullet_instance.global_position = global_position
bullet_instance.set_direction(direction)
get_parent().add_child(bullet_instance)
اکنون دشمن به صورت دوره ای گلوله هایی را به سمت موقعیت بازیکن شلیک می کند. برای بررسی اینکه آیا shoot_timer کمتر از 0 است یا خیر، از دستور if شرطی استفاده کنید. اگر چنین است، گلوله را شلیک کنید.
حرکت تصادفی دشمن
علاوه بر دشمنانی که بازیکن را دنبال می کنند یا به سمت آن شلیک می کنند، یک دشمن به طور تصادفی در حال حرکت می تواند عنصر غیرقابل پیش بینی و چالش را به بازی شما تزریق کند. ایجاد دشمن با الگوهای حرکت تصادفی نیاز به ترکیبی از منطق ساده و تولید اعداد تصادفی دارد.
با ایجاد یک صحنه جدید شروع کنید و یک گره KinematicBody2D به نام RandomEnemy اضافه کنید. یک اسکریپت جدید با نام RandomEnemy.gd ایجاد کنید و آن را به گره RandomEnemy متصل کنید. اسکریپت منطق حرکت تصادفی را مدیریت می کند.
extends KinematicBody2D
const MOVE_SPEED = 100
const MOVE_INTERVAL_MIN = 1.0
const MOVE_INTERVAL_MAX = 3.0
var move_timer = 0.0
var move_interval = 0.0
var move_direction = Vector2.ZERO
func _ready():
choose_new_direction()
func choose_new_direction():
move_interval = rand_range(MOVE_INTERVAL_MIN, MOVE_INTERVAL_MAX)
move_timer = move_interval
move_direction = Vector2(randf(), randf()).normalized()
func _physics_process(delta):
move_timer -= delta
if move_timer <= 0.0:
choose_new_direction()
var motion = move_direction * MOVE_SPEED * delta
move_and_collide(motion)
از جمله ویژگی های اضافی
بسیاری از ویژگی های اضافی وجود دارد که می توانید به دشمنان خود اضافه کنید تا گیم پلی بازی را جذاب تر کنید.
باس بتلز
باسها بهعنوان لحظات اوج در بازی شما عمل میکنند و رویاروییهای به یاد ماندنی و چالشانگیز را ارائه میکنند که مهارتها و پشتکار بازیکنان را آزمایش میکند. دشمنان باس معمولاً بزرگتر و قدرتمندتر از دشمنان معمولی هستند و بازیکنان را ملزم به استفاده از استراتژی ها و تاکتیک های خاصی برای شکست دادن آنها می کنند.
تخم ریزی دشمن پویا
یک سیستم تخم ریزی پویا را پیاده سازی کنید که برخوردهای دشمن را بر اساس عملکرد، مکان یا رویدادهای درون بازی بازیکن تنظیم می کند. این یک تجربه گیم پلی پاسخگوتر و شخصی سازی شده را ایجاد می کند.
سازگاری محیطی
دشمنانی ایجاد کنید که بتوانند با محیط سازگار شوند، مانند دشمنانی که می توانند پرواز کنند، شنا کنند یا از دیوارها بالا بروند. این تطبیق پذیری امکانات جدیدی را برای گیم پلی باز می کند و بازیکنان را برای حرکت در زمین های مختلف به چالش می کشد.
نقاط ضعف و مقاومت دشمن
نقاط ضعف و مقاومت های خاصی را به دشمنان اختصاص دهید و بازیکنان را تشویق کنید تا با رویکردها و تاکتیک های مختلف آزمایش کنند. برخی از دشمنان ممکن است در برابر حملات یا عناصر خاصی آسیب پذیر باشند، در حالی که برخی دیگر مصون یا مقاوم هستند.
سفارشی سازی دشمن و تغییرات رفتاری
با دادن تغییرات رفتاری تصادفی به دشمنان، سطحی از غیرقابل پیش بینی بودن را اضافه کنید. برای مثال، یک دشمن ممکن است الگوهای حمله یا سرعت حرکت متفاوتی در بازیهای مختلف داشته باشد، که گیمپلی را تازه و قابل پخش نگه میدارد.
گنجاندن انواع این ویژگی های اضافی می تواند طراحی دشمن بازی شما را غنی کند و هر رویارویی را برای بازیکنان منحصر به فرد و به یاد ماندنی کند.
به یاد داشته باشید که در حالی که معرفی مکانیک های جدید می تواند هیجان انگیز باشد، حفظ تعادل و انسجام در طراحی کلی بازی بسیار مهم است.
بهترین روش ها برای ایجاد دشمن
هنگام ایجاد دشمن در بازی گودو، بهترین روش های زیر را در نظر بگیرید:
ارتباط تصویری شفاف
از طرح های دشمن متمایز استفاده کنید که از محیط متمایز است تا دشمنان را به راحتی تشخیص دهید.
برای متمایز کردن انواع دشمن، از کدگذاری رنگ یا سایه های منحصر به فرد استفاده کنید. مطمئن شوید که انیمیشن ها و جلوه های بصری دشمن رفتارها و حملات آنها را تقویت می کند.
دشواری تعادل
با پیشروی بازیکن در بازی، به تدریج دشمنانی را با پیچیدگی فزاینده معرفی کنید. رویارویی دشمن را با بازیکنانی در سطوح مختلف مهارت آزمایش کنید تا مطمئن شوید که چالش ها برای همه بازیکنان مناسب است. از افزایش ناگهانی سختی که می تواند بازیکنان را ناامید کند، اجتناب کنید.
اجتناب از شلیک های ارزان
دشمنان را با حملاتی طراحی کنید که بازیکن می تواند طفره بزند یا جلوی آنها را بگیرد و به آنها فرصتی برای واکنش بدهید. از یک ضربه باکس منصفانه برای حملات دشمنان استفاده کنید، از حملاتی که فراتر از نمایش بصری آنها ضربه می زنند، اجتناب کنید. از علائم یا نشانه های هشدار دهنده برای اشاره به حملات خطرناک استفاده کنید.
تست بازی و تکرار
به طور منظم برخوردهای دشمن را در طول توسعه آزمایش کنید تا عامل سرگرمی و دشواری آنها را ارزیابی کنید. بازخورد بازیکنان را جمع آوری کنید و از آن برای تنظیم دقیق رفتارها، نقاط قوت و ضعف دشمن استفاده کنید.
جلوه های صوتی
جلوه های صوتی نقش مهمی در ایجاد محیطی همه جانبه و فریبنده بازی دارند. هنگامی که دشمن ضربه می زند، جلوه های صوتی مناسب بدون حق چاپ را اضافه کنید تا حس تاثیرگذاری و درگیری در نبرد را تقویت کنید.
بازی شما میتواند هر ضربه یا ضربه را با نشانههای صوتی مشخصی که با نوع حمله و ویژگیهای دشمن مطابقت دارد همراهی کند.
درگیر شدن بیشتر بازی های گودو با دشمنان
دشمنان یکی از اجزای اساسی بسیاری از بازیها هستند و در هنگام شکست، چالشها، موانع و حس موفقیت را به وجود میآورند. با افزودن انواع مختلف دشمنان با رفتارهای مختلف، نقاط سلامتی و مکانیک تیراندازی، می توانید تجربه های گیم پلی متنوع و جذابی را برای بازیکنان ایجاد کنید.
به یاد داشته باشید که سختی را متعادل کنید، بازخورد بصری و شنیداری ارائه دهید و دشمنان خود را به طور کامل آزمایش کنید تا تجربه بازی لذت بخش و با ارزشی را برای بازیکنان فراهم کنید.