Menu
CoddyTech

Ăn

Bài học 6 trên 14 trong khóa học Game Unity: rắn 3D của Coddy.

Con rắn ăn khi đầu của nó bước vào ô chứa thức ăn. Cả hai đều nằm trên các số nguyên, nên so sánh vị trí bằng == là an toàn: toán tử == của Unity trên Vector3 xem hai vị trí là bằng nhau khi chúng cách nhau dưới 0.00001, và việc cộng các ô nguyên không bao giờ tạo ra khoảng cách nhỏ đến vậy.

Con rắn biết khi nào nó bước đi; GameManager biết thức ăn ở đâu và giữ điểm số. Vì vậy, sau mỗi bước, con rắn hỏi và GameManager trả lời: IsFood(cell) trả về một giá trị bool, còn Eat() cộng một điểm và di chuyển thức ăn. Con rắn gọi GameManager thông qua Instance tĩnh, singleton mà bạn đã gặp trong hành trình C# cho Unity.

Hãy kiểm tra ô mà đầu rắn vừa đi vào sau khi di chuyển. Bạn nhặt chìa khóa trên lưới theo cách tương tự:

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

Thử thách

Trung bình

Con rắn ăn thức ăn và ghi thêm một điểm.

  1. Trong GameManager, thêm public static GameManager Instance;, gán giá trị trong Awake(), và thêm private int score;
  2. public bool IsFood(Vector3 cell): trả về true khi cell là vị trí của thức ăn. public void Eat(): thêm một điểm, sau đó gọi MoveFood().
  3. Trong Snake, ở cuối Step(): nếu GameManager.Instance.IsFood(next), hãy gọi Eat().

Nhấn Chơi và điều khiển rắn di chuyển đến thức ăn: thức ăn sẽ nhảy sang một ô mới. Sau đó nhấn Kiểm tra.

Tự làm thử

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

Tất cả bài học trong Game Unity: rắn 3D

Tự luyện tập: Playground Unity