Menu
CoddyTech

הצגת הניקוד

חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 2 מתוך 56.

הטקסט של text הוא מחרוזת, לכן מספר צריך להפוך לטקסט לפני שמציגים אותו. צירוף שלו למחרוזת באמצעות + עושה זאת: "Wood: " + wood הוא Wood: 12 כאשר wood הוא 12, ו-wood.ToString() הוא 12. ה-int לבדו לא מתאים: woodText.text = wood; נכשל עם CS0029, אי אפשר להמיר באופן משתמע את הסוג 'int' לסוג 'string'.

המספר נמצא בשדה int, והטקסט רק מציג אותו. מתודה אחת מעדכנת את הטקסט מתוך השדה; בכל פעם שהמספר משתנה קוראים לה, וכך גם ב-Start(), כדי שבפריים הראשון יוצג הערך האמיתי במקום מה שהוקלד ב-Inspector. כאן מקש הרווח קוצץ 3 בולי עץ:

public TMP_Text woodText;
private int wood;

void Start()
{
    ShowWood();
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        wood += 3;
        ShowWood();
    }
}

void ShowWood()
{
    woodText.text = "Wood: " + wood;
}

הטקסט משתנה רק כאשר wood משתנה. עדכון שלו בכל Update() היה נראה אותו הדבר, אבל היה יוצר מחרוזת חדשה 60 פעמים בשנייה לחינם. לסדר יש חשיבות: קריאה ל-ShowWood() לפני wood += 3 הייתה מציגה את הספירה הקודמת, בפיגור של לחיצה אחת.

challenge icon

אתגר

קל

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

  • seedsText מציג את מספר הזרעים שנותרו, כמו Seeds: 4, ו־treesText מציג את מספר העצים שניטעו, כמו Trees: 1.
  • שניהם מציגים את הערכים הנכונים כבר מהפריים הראשון ואחרי כל נטיעה. ב־Inspector מוגדרים לגנן 5 זרעים, אף שהטקסטים בסצנה עדיין מציגים Seeds: 10 ו־Trees: ?.
  • כתבו מתודה אחת שמעדכנת את שני הטקסטים, וקראו לה בכל מקום שבו היא נחוצה.

לחצו על Play, נטעו עד שייגמרו הזרעים, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;
using TMPro;

public class Gardener : MonoBehaviour
{
    public float speed = 4f;
    public int seeds = 10;
    public GameObject saplingPrefab;
    public TMP_Text seedsText;
    public TMP_Text treesText;
    private int trees;

    void Update()
    {
        float move = Input.GetAxisRaw("Horizontal");
        transform.Translate(move * speed * Time.deltaTime, 0f, 0f);

        if (Input.GetKeyDown(KeyCode.Space) && seeds > 0)
        {
            Vector3 spot = new Vector3(transform.position.x, 0.5f, 1.5f);
            Instantiate(saplingPrefab, spot, Quaternion.identity);
            seeds--;
            trees++;
        }
    }

    // הצג את Seeds: ואת Trees: בשני שדות הטקסט, כבר מהפריים הראשון
}
quiz iconבחנו את עצמכם

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

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