לאכול
שיעור 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);
}אתגר
בינוניהנחש אוכל את האוכל ומקבל נקודה.
- ב־
GameManager, הוסףpublic static GameManager Instance;, קבע אותו ב־Awake(), והוסףprivate int score; public bool IsFood(Vector3 cell): מחזירה true כאשר התא הוא המיקום של האוכל.public void Eat(): עוד נקודה אחת, ואזMoveFood().- ב־
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 אונליין