Menu
CoddyTech

אכול

שיעור 6 מתוך 14 בקורס משחק Unity: נחש בתלת־ממד של Coddy.

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

הנחש יודע מתי הוא דורך; GameManager יודע איפה האוכל נמצא ושומר על הניקוד. לכן אחרי כל צעד הנחש שואל, ו-GameManager עונה: IsFood(cell) מחזירה bool, ו-Eat() מוסיפה נקודה ומזיזה את האוכל. הנחש מגיע ל-GameManager דרך Instance סטטי, המימוש היחיד שפגשת במסלול C# for Unity.

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

transform.position = next;
if (key.position == transform.position)
{
    keysHeld++;
    key.gameObject.SetActive(false);
}
challenge icon

אתגר

בינוני

ב־GameManager:

  1. הוסיפו public static GameManager Instance;, הגדירו אותו ב־Awake(), והוסיפו private int score;.
  2. כתבו public bool IsFood(Vector3 cell): אמת כאשר cell הוא המיקום של האוכל.
  3. כתבו public void Eat(): הוסיפו 1 ל־score וקראו ל־MoveFood().

ב־Snake, בסוף Step(), לאחר שהראש זז: אם התא של הראש הוא אוכל, קראו ל־Eat().

לחצו על Play ונווטו אל האוכל, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public Snake snake;
    public GameObject foodPrefab;
    private Transform food;

    void Start()
    {
        food = Instantiate(foodPrefab).transform;
        MoveFood();
    }

    void MoveFood()
    {
        int x = Random.Range(-snake.edge, snake.edge + 1);
        int z = Random.Range(-snake.edge, snake.edge + 1);
        food.position = new Vector3(x, 0f, z);
    }
}
quiz iconבחנו את עצמכם

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

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