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

אתגר

בינוני

הנחש אוכל את האוכל ומקבל נקודה.

  1. ב־GameManager, הוסף public static GameManager Instance;, קבע אותו ב־Awake(), והוסף private int score;
  2. public bool IsFood(Vector3 cell): מחזירה true כאשר התא הוא המיקום של האוכל. public void Eat(): עוד נקודה אחת, ואז MoveFood().
  3. ב־Snake, בסוף Step(): אם GameManager.Instance.IsFood(next), קרא ל־Eat().

לחץ על "שחק" ונווט אל האוכל: הוא קופץ לתא חדש. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

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);
    }
}

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

תרגלו בעצמכם: Unity אונליין