Menu
CoddyTech

كُلْ

الدرس 6 من 14 في دورة لعبة Unity: الثعبان ثلاثي الأبعاد على Coddy.

تأكل الأفعى عندما ينتقل رأسها إلى الخلية التي يوجد فيها الطعام. كلاهما يقع على أعداد صحيحة، لذا فإن مقارنة موضعيهما باستخدام == آمنة: تعتبر Unity أن موضعين متساويان عند استخدام == على Vector3 إذا كانا أقرب من 0.00001، وإضافة خلايا كاملة لا تترك أبدًا فجوة بهذا الصغر.

تعرف الأفعى متى تنتقل؛ أما GameManager فيعرف مكان الطعام ويحافظ على النتيجة. لذا، بعد كل خطوة، تسأل الأفعى ويجيب GameManager: تُرجع IsFood(cell) قيمة bool، وتضيف Eat() نقطة وتنقل الطعام. تصل الأفعى إلى GameManager عبر Instance الثابتة، وهي المفردة التي تعرفت عليها في رحلة C# مع 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): تكون النتيجة صحيحة عندما تكون الخلية في موضع الطعام. 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: الثعبان ثلاثي الأبعاد

تدرّب بنفسك: Playground لـ Unity