Các điểm mốc
Bài học 1 trên 25 trong khóa học Game Unity: thủ thành của Coddy.
Trong khóa học này, bạn sẽ xây dựng một trò chơi phòng thủ tháp: kẻ địch đi theo một con đường thành từng đợt hướng về căn cứ của bạn, còn những tòa tháp bạn xây bên đường sẽ chặn chúng. Mỗi bài học bổ sung một tính năng. Nhấn Chơi để thử và Kiểm tra để chấm điểm. Cả mười hai script đều có trong dự án ngay từ đầu; hầu hết là các đoạn khung ngắn sẽ được hoàn thiện trong những bài học sau, còn EnemyData được cung cấp cho bài học 2.
Con đường gồm tám điểm mốc, từ WP0 ở điểm xuất phát đến WP7 ở căn cứ, nằm trong mảng waypoints của Grunt. Grunt lưu chỉ số của điểm mà nó đang hướng tới và di chuyển về phía đó. Vector3.MoveTowards không bao giờ di chuyển vượt quá mục tiêu, vì vậy Grunt dừng chính xác tại điểm mốc và == có thể xác định rằng nó đã đến nơi:
Vector3 target = waypoints[3].position;
transform.position = Vector3.MoveTowards(transform.position, target, 5f * Time.deltaTime);
if (transform.position == target)
{
// Đã đến nơi: hướng đến điểm tiếp theo
}Sau điểm mốc cuối cùng, chỉ số bằng waypoints.Length, và việc đọc mảng tại vị trí đó sẽ gây ra lỗi, vì vậy hãy kiểm tra chỉ số trước khi sử dụng.
Thử thách
DễCho Grunt đi theo đường, từ điểm mốc này đến điểm mốc khác.
- Trong
Enemy, thêmprivate int next = 1;(Grunt bắt đầu ở WP0). - Trong
Update, trả về khinext >= waypoints.Length. - Di chuyển về phía
waypoints[next].positionbằngVector3.MoveTowardsvới tốc độspeed * Time.deltaTime; khi đến nơi, dùngnext++.
Nhấn Chơi: Grunt đi qua mọi góc và dừng ở căn cứ. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 2f;
public Transform[] waypoints;
void Update()
{
// Cho Enemy di chuyển theo đường đi tại đây: lần lượt qua từng điểm mốc.
}
}
Tất cả bài học trong Game Unity: thủ thành
Tự luyện tập: Playground Unity