הטמע זיהוי פגיעות עבור כל סוג של MapChip

עודכן דף :
תאריך יצירת דף :

סביבת אימות

חלונות
  • חלונות 11
עורך Unity
  • 2021.3.3F1
חבילת מערכת קלט
  • 1.3.0

תנאים מוקדמים לטיפ זה

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

מהם התנאים המוקדמים לטיפ זה?

אודות השאלת חומרי מפה

אנו מעבדים בהשאלה מהאתרים הבאים.

בהתחלה

הפעם, MapChips ממוקמים ב- TileMap אחד, ומחליטים אם לבצע קביעת פגיעה בהתאם לסוג MapTip שהוצב.

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

יישום דמויות מהלכות

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

אני אשמיט הפעם את האנימציה המהלכת כי ההליך יהיה ארוך אם הוא ייושם. אם ברצונך ליישם אותו, עיין בטיפים הבאים.

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

לאחר התצורה, לחץ על כפתור "החל" למטה.

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

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

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

using UnityEngine;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
  // 一定時間ごとに呼ばれます
  void FixedUpdate()
  {
    // キーボードの情報を取得
    var keyboard = Keyboard.current;

    // スプライトの移動処理
    if (keyboard.leftArrowKey.isPressed)
    {
      transform.Translate(-0.1f, 0, 0, Space.World);
    }
    if (keyboard.rightArrowKey.isPressed)
    {
      transform.Translate(0.1f, 0, 0, Space.World);
    }
    if (keyboard.upArrowKey.isPressed)
    {
      transform.Translate(0, 0.1f, 0, Space.World);
    }
    if (keyboard.downArrowKey.isPressed)
    {
      transform.Translate(0, -0.1f, 0, Space.World);
    }
  }
}

הסקריפט שתיצור יתחבר לאובייקט התו.

הפעל את המשחק ובדוק אם הדמות זזה עם המקלדת.

הכנת MapTips

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

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

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

חלק ב- 32 פיקסלים.

בחר בכרטיסיה לוח אריחים כדי ליצור לוח צבעים. אם אין כרטיסיות, אתה יכול להציג אותם מהתפריט עם "חלון > 2D -> לוח אריחים". שם לוח הצבעים יכול להיות כל דבר, אבל כאן זה "MapChipPalette".

מאז נשמור אותו בתיקיה, ליצור תיקייה חדשה "MapChipPalette" בתיקייה Scene ולציין אותו.

תיקיית MapChipPalette נוספה לפרוייקט.

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

MapTips נוספו ללוח הצבעים.

יצירת מפה

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

לאחר ההוספה, בחר Tilemap. התצוגה מציגה רשת.

ראשית, הגדר שבב מפה שאינו הופך לקיר בנוף.

בינתיים הנחתי אותו בכל מקום.

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

הפעם לא הייתה בעיה, אבל אם הדמות שלך עומדת להיות מאחורי המפה, הגדר את סדר השכבות למספר גדול יותר מ- Tilemap.

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

MapChip פגע בהגדרות זיהוי

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

יש maptip להגדיר בלוח בפנים, אז הראשון לבחור maptip כי אתה יכול ללכת על.

מהמפקח, הגדר את הערך Collider Type על ללא. מאוחר יותר, תוסיף הגדרת זיהוי התנגשות ל- Tilemap, אך הגדרתה ל- "None" תמנע התנגשות של שבב מפה זה.

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

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

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

מכאן, זה כמעט זהה לתוכן של "ליישם זיהוי להיט עם tilemap".

ראשית, בצע את ההגדרות הדרושות לזיהוי התנגשות תווים. הוסף את "Physics 2D -> Circle Collider 2D" כרכיב. הפעם הספרייט עגול, אז הכנתי אותו לעיגול, אבל אנא בחרו קופסה או קפסולה בהתאם לצורה.

נוסיף גם "פיזיקה 2D -> Rigidbody 2D".

הגדר את סולם הכבידה ל-0 כדי למנוע מכוח הכבידה ליפול. כמו כן, בדוק Z עבור "תקן סיבוב" כדי למנוע מהספרייט להסתובב.

עבור Tilemap, הוסף את הרכיב Tilemap -> Tilemap Collider 2D.

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

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

שילוב זיהוי פגיעות MapChip

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

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

ראשית, סמן את "השתמש ב- composite" ב- Tilemap Collider 2D.

תחת הוסף רכיב, בחר Physics 2D -> Composite Collider 2D.

"Rigidbody 2D" יתווסף גם, אז לעשות "סוג גוף" ל "סטטי".

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

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