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

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

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

הגדרת משחק Godot

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

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

צור סצנה חדשה והוסף א CharacterBody2D צומת כצומת השורש. הוסף ספרייט2D צומת כילד של CharacterBody2D לייצג חזותית את דמות השחקן.

הַבָּא, להוסיף תנועה לשחקן דמות באמצעות GDScript:

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

instagram viewer

if Input.is_action_pressed("ui_down"):
input_dir.y += 1

velocity = input_dir.normalized() * speed
move_and_collide(velocity * delta)

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

צורות התנגשות שונות

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

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

צורת התנגשות מעגל

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

# Inside the player character's script
var collision_shape = CollisionShape2D.new()
var circle_shape = CircleShape2D.new()
circle_shape.radius = 32
collision_shape.shape = circle_shape
add_child(collision_shape)

צורת התנגשות מלבן

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

# Inside the player character's script
var collision_shape = CollisionShape2D.new()
var rect_shape = RectangleShape2D.new()
rect_shape.extents = Vector2(32, 64)
collision_shape.shape = rect_shape
add_child(collision_shape)

צורת התנגשות מצולע קמורה

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

# Inside the player character's script
var collision_shape = CollisionShape2D.new()
var polygon_shape = ConvexPolygonShape2D.new()
polygon_shape.set_points([Vector2(-32, -64), Vector2(32, -64), Vector2(0, 64)])
collision_shape.shape = polygon_shape
add_child(collision_shape)

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

זיהוי התנגשויות

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

# Detecting Collisions in _physics_process
func _physics_process(delta):
var input_dir = Vector2.ZERO
#... (input handling)

velocity = input_dir.normalized() * speed
var collision = move_and_collide(velocity * delta)

if collision:
print("collided")

להלן הפלט:

אותות התנגשות ומסכות התנגשות

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

אותות התנגשות

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

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

# Inside the player character's script
func _ready():
connect("body_entered", self, "_on_body_entered")

func _on_body_entered(body: Node):
if body.is_in_group("collectible"):
# Play a sound effect
play_collectible_sound()

# Perform additional logic like collecting the item

# Remove the collectible from the scene
body.queue_free()

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

מסכות התנגשות

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

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

# Inside the enemy's script
func _ready():
# Disable collision with other enemies
set_collision_mask_value(2, false)

# Enable collision with platforms
set_collision_mask_value(3, true)

# Inside the bullet's script
func _ready():
# Enable collision with enemies
set_collision_mask_value(2, true)

# Disable collision with platforms
set_collision_mask_value(3, false)

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

שיטות עבודה מומלצות לזיהוי התנגשות

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

השתמש בצורות פשוטות

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

מסכות התנגשות שכבה

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

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

קבוצות התנגשות

קבץ אובייקטים בעלי מאפייני התנגשות דומים לניהול קל יותר וזיהוי התנגשות יעיל.

תיבות תוחמות

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

השתמש בשאילתות קינמטיות

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

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

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

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