משחקים רבים כוללים סוג של אויב לקרב איתו. חקור את הדרכים השונות שבהן אתה יכול להוסיף - ועדינות - קרב אויב.

לאויבים יש תפקיד מכריע בהפיכת המשחקים למלהיבים ומאתגרים עבור השחקנים. בין אם אתה יוצר פלטפורמת 2D, יריות מלמעלה למטה או משחק תפקידים, הוספת אויבים יכולה לשפר משמעותית את חווית המשחק.

הממשק הידידותי למשתמש של Godot ושפת הסקריפט האינטואיטיבית, GDScript, הופכים את התהליך ליעיל ומהנה.

הגדרת משחק Godot

לפני הצלילה ליצירת אויב, הגדר את המבנה הבסיסי של משחק הדו-ממד שלך מנוע המשחק Godot.

צור פרויקט דו-ממדי חדש בגודו. בסצנה הראשית, צור חדש KinematicBody2D צומת ושם אותו שחקן. בתוך צומת הנגן, הוסף א CollisionShape2D עם צורת מלבן, שתהיה ה-hitbox של השחקן. הוסף גם א שֵׁדוֹן צומת כייצוג חזותי של דמות השחקן.

הקוד המשמש במאמר זה זמין כאן מאגר GitHub והוא בחינם עבורך לשימוש תחת רישיון MIT.

צרף את קוד ה-GDScript הבא ל- שחקן צומת כדי לאפשר תנועה בסיסית:

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

instagram viewer

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 צומת בשם אוֹיֵב. בתוך צומת האויב, הוסף א CollisionShape2D צומת עם צורת עיגול כדי להגדיר את ה-hitbox של האויב. הוסף גם א שֵׁדוֹן צומת לייצג את האויב חזותית.

עם הגדרת ההתנגשות, האויב יהיה מוכן לתקשר עם השחקן ועם אלמנטים אחרים בעולם המשחק שלך.

לגרום לאויב לעקוב אחרי השחקן

יצירת אויבים שעוקבים אחר השחקן מוסיפה רמה חדשה של אתגר למשחק.

צור סצנה חדשה עבור סוג האויב הבא והוסף א KinematicBody2D צומת בשם עקוב אחר האויב עם 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)

עכשיו ה עקוב אחר האויב ינוע לעבר עמדת השחקן בכל פריים.

הוספת כדורי אויב

כעת, אתה יכול לגרום לאויב לירות כדורים לעבר השחקן. צור סצנה חדשה ושם לה 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, הוסף א CollisionShape2D צומת עם צורת מלבן בתור ה-hitbox.

צרף את קוד ה-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. אם כן, אז תירה בכדור.

אויב זז באקראי

בנוסף לאויבים שעוקבים אחר השחקן או יורים בו, אויב שזז באקראי יכול להחדיר אלמנט של בלתי צפוי ואתגר למשחק שלך. יצירת אויב עם דפוסי תנועה אקראיים דורשת שילוב של היגיון פשוט ויצירת מספרים אקראיים.

התחל ביצירת סצנה חדשה והוסף א KinematicBody2D צומת בשם אויב אקראי. צור סקריפט חדש בשם 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)

כולל תכונות נוספות

ישנן תכונות נוספות רבות שתוכל להוסיף לאויביך כדי להפוך את המשחק למעניין יותר.

קרבות בוס

קרבות בוס משמשים כרגעי שיא במשחק שלך, ומספקים מפגשים בלתי נשכחים ומאתגרים הבודקים את כישוריהם והתמדה של השחקנים. אויבי הבוס הם בדרך כלל גדולים וחזקים יותר מאשר אויבים רגילים, מה שמחייב שחקנים להשתמש באסטרטגיות וטקטיקות ספציפיות כדי להביס אותם.

השרצת אויב דינמית

הטמע מערכת השרצים דינמית המתאימה את מפגשי האויב על סמך ביצועי השחקן, מיקומו או אירועי המשחק. זה יוצר חווית משחק מגיבה ומותאמת יותר.

הסתגלות סביבתית

צור אויבים שיכולים להסתגל לסביבה, כמו אויבים שיכולים לעוף, לשחות או לטפס על קירות. הרבגוניות הזו פותחת אפשרויות משחק חדשות ומאתגרת שחקנים לנווט בשטחים שונים.

חולשות והתנגדויות של האויב

להקצות חולשות והתנגדויות ספציפיות לאויבים, לעודד שחקנים להתנסות עם גישות וטקטיקות שונות. אויבים מסוימים עשויים להיות פגיעים להתקפות או אלמנטים מסוימים, בעוד שאחרים חסינים או עמידים.

התאמה אישית וגרסאות התנהגות של האויב

הוסף רמה של אי-חיזוי על ידי מתן וריאציות התנהגות אקראיות לאויבים. לדוגמה, לאויב עשויות להיות דפוסי התקפה או מהירויות תנועה שונות במעברים שונים, מה ששומר על משחק טרי וניתן להפעלה חוזרת.

הכללת מגוון של תכונות נוספות אלה יכולה להעשיר את עיצוב האויב של המשחק שלך, ולהפוך כל מפגש לייחודי ובלתי נשכח עבור שחקנים.

זכור כי בעוד שהצגת מכניקה חדשה יכולה להיות מרגשת, זה חיוני לשמור על איזון וקוהרנטיות בתוך העיצוב הכולל של המשחק שלך.

שיטות עבודה מומלצות ליצירת אויבים

בעת יצירת אויבים במשחק Godot שלך, שקול את השיטות המומלצות הבאות:

תקשורת חזותית ברורה

השתמש בעיצובי אויב מובהקים הבולטים מהסביבה כדי להפוך את האויבים לזיהוי בקלות.

שקול להשתמש בקידוד צבע או בצלליות ייחודיות כדי להבדיל בין סוגי אויב. ודא שהאנימציות והאפקטים החזותיים של האויב מחזקים את ההתנהגויות וההתקפות שלהם.

קושי באיזון

הציגו אויבים בהדרגה במורכבות הולכת וגוברת ככל שהשחקן מתקדם במשחק. בדוק מפגשי אויב עם שחקנים ברמות מיומנות שונות כדי להבטיח שהאתגרים מתאימים לכל השחקנים. הימנע מקוצי קושי פתאומיים שיכולים לתסכל שחקנים.

הימנעות מצילומים זולים

עצב אויבים עם התקפות שהשחקן יכול להתחמק או לחסום, לתת להם הזדמנות להגיב. השתמש ב-hitbox הוגן עבור התקפות של אויבים, הימנעות מהתקפות שפוגעות מעבר לייצוג החזותי שלהן. השתמש בסימני אזהרה או ברמזים כדי לרמוז על התקפות מסוכנות.

בדיקות משחק ואיטרציה

בדוק באופן קבוע מפגשי אויב במהלך הפיתוח כדי להעריך את גורם הכיף והקושי שלהם. אסוף משוב משחקנים והשתמש בו כדי לכוונן התנהגויות, חוזקות וחולשות של האויב.

אפקטים קוליים

לאפקטים קוליים תפקיד מכריע ביצירת סביבת משחק סוחפת ושובה לב. כאשר אויב חוטף מכה, הוסף מתאים אפקטים קוליים ללא זכויות יוצרים לחזק את תחושת ההשפעה והמעורבות בלחימה.

המשחק שלך יכול ללוות כל מכה או מכה עם רמזים אודיו מובהקים התואמים לסוג ההתקפה ולמאפייני האויב.

הופך את משחקי Godot ליותר מעורבים עם אויבים

אויבים הם מרכיב בסיסי במשחקים רבים, המספקים אתגרים, מכשולים ותחושת הישג כאשר הם מובסים. על ידי הוספת סוגים שונים של אויבים עם התנהגויות שונות, נקודות בריאות ומכניקת ירי, אתה יכול ליצור חוויות משחק מגוונות ומרתקות לשחקנים.

זכור לאזן את הקושי, להציע משוב חזותי ושמיעתי, ולבדוק את האויבים שלך ביסודיות כדי לספק לשחקנים חווית משחק מהנה ומתגמלת.