איסוף מטבעות דו מימדי באחדות

איסוף ואיסוף מטבעות הפכו למרכיב עיקרי במשחקי דו-ממד, במיוחד ב-2D Platformers.

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

Sharp Coder נגן וידאו

אני אשתמש ב-2D Character Controller, אבל אתה יכול לדלג על החלק הזה אם כבר יש לך בקר 2D.

שלבים

כדי ליצור מטבע דו מימדי שניתן לאסוף ולאסוף, בצע את השלבים הבאים:

  • צור GameObject חדש (GameObject -> Create Empty) ושם לו "Coin"
  • צרף רכיב SpriteRenderer לאובייקט "Coin"
  • הקצה את ספרייט המטבע שלך ל-SpriteRenderer (תוכל להשתמש בתמונה למטה, ודא שסוג הטקסטורה בהגדרות הייבוא ​​מוגדר ל-'Sprite (2D and UI)')

תמונה שקופה של מטבע זהב

  • קנה קנה מידה של אובייקט המטבע עד לגודל הרצוי
  • שנה את מיקום ציר המטבע 'Z' כך שיתאים למיקום השחקן
  • צרף רכיב BoxCollider2D לאובייקט "Coin"
  • צור סקריפט חדש, קרא לו "SC_2DCoin", הסר ממנו הכל ואז הדבק בתוכו את הקוד למטה:

SC_2DCoin.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SC_2DCoin : MonoBehaviour
{
    //Keep track of total picked coins (Since the value is static, it can be accessed at "SC_2DCoin.totalCoins" from any script)
    public static int totalCoins = 0; 

    void Awake()
    {
        //Make Collider2D as trigger 
        GetComponent<Collider2D>().isTrigger = true;
    }

    void OnTriggerEnter2D(Collider2D c2d)
    {
        //Destroy the coin if Object tagged Player comes in contact with it
        if (c2d.CompareTag("Player"))
        {
            //Add coin to counter
            totalCoins++;
            //Test: Print total number of coins
            Debug.Log("You currently have " + SC_2DCoin.totalCoins + " Coins.");
            //Destroy coin
            Destroy(gameObject);
        }
    }
}
  • צרף את הסקריפט SC_2DCoin לאובייקט "Coin"
  • בחר את אובייקט השחקן שלך וודא שהתג שלו מוגדר ל-"Player" (זה נחוץ כדי להיות מסוגל להרים את המטבע)

המטבע מוכן כעת, אתה יכול לשמור אותו ב-Prefab ולשכפל אותו סביב הרמה.

כדי ליצור מונה מטבעות, בצע את השלבים הבאים:

  • צור תמונת ממשק משתמש חדשה על ידי לחיצה ימנית על תצוגת ההיררכיה -> ממשק משתמש -> תמונה ושמה "CoinIcon"
  • הקצה מטבעות לרכיב Image
  • שנה את יישור RectTransform ל-'top left', סובב ל-(0, 1), פוסט X ל-'5', Pos Y ל-'-5', רוחב וגובה ל-* '25'

  • צור טקסט חדש על ידי לחיצה ימנית על תצוגת ההיררכיה -> ממשק משתמש -> טקסט ושם לו "CoinCounter"
  • הגדר את "CoinCounter" RectTransform זהה ל-"CoinIcon", למעט הגדר את Pos X ל-'35' ואת הרוחב ל- '160'
  • הגדר את סגנון גופן טקסט ל-'Bold', גודל גופן ל-22, יישור ל-'left center' וצבע ל- 'white'

  • צור סקריפט חדש, קרא לו "SC_CoinCounter", הסר ממנו הכל ואז הדבק בתוכו את הקוד למטה:

סקריפט מונה המטבעות יחיל את מספר המטבעות על אלמנט הטקסט.

SC_CoinCounter.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SC_CoinCounter : MonoBehaviour
{
    Text counterText;

    // Start is called before the first frame update
    void Start()
    {
        counterText = GetComponent<Text>();
    }

    // Update is called once per frame
    void Update()
    {
        //Set the current number of coins to display
        if(counterText.text != SC_2DCoin.totalCoins.ToString())
        {
            counterText.text = SC_2DCoin.totalCoins.ToString();
        }
    }
}
  • צרף את הסקריפט SC_CoinCounter לאובייקט הטקסט "CoinCounter"

לחץ על Play וצפה במטבעות נעלמים ביצירת קשר עם שחקן ומתווספים למונה.