Ba làn đường
Thuộc phần Xây dựng trò chơi thực tế trong hành trình Unity của Coddy. Bài học 27 trên 60.
Chương này xây dựng một trò chơi chạy vô tận. Nhân vật chạy lao xuống con đường có ba làn và chuyển làn để tránh các chướng ngại vật đang lao về phía nó. Trong những bài học tiếp theo, con đường sẽ tăng tốc, quãng đường sẽ hiển thị trên màn hình, một vụ va chạm sẽ kết thúc lượt chạy và có nút để chạy lại, còn thành tích tốt nhất sẽ được lưu. Nhân vật không bao giờ di chuyển về phía trước: nó luôn ở z = 0, còn các chướng ngại vật di chuyển về phía nó, nên con đường không bao giờ kết thúc. Trò chơi có bốn tập lệnh, Runner, Spawner, Obstacle và GameManager, còn ba tập lệnh cuối hiện vẫn để trống.
Điều khiển nhân vật chạy trên các làn đường không giống như lái xe: nhân vật luôn ở một trong vài vị trí cố định. Lưu vị trí dưới dạng số nguyên, thay đổi con số khi nhấn phím rồi tính vị trí từ con số đó. Sàn nâng của người lau cửa sổ này phục vụ năm tầng của một tòa nhà, cách nhau 3 đơn vị:
[SerializeField] private float floorHeight = 3f;
[SerializeField] private float moveSpeed = 6f;
private int floor = 0;
void Update()
{
if (Input.GetKeyDown(KeyCode.UpArrow)) floor++;
if (Input.GetKeyDown(KeyCode.DownArrow)) floor--;
floor = Mathf.Clamp(floor, 0, 4);
Vector3 p = transform.position;
p.y = Mathf.MoveTowards(p.y, floor * floorHeight, moveSpeed * Time.deltaTime);
transform.position = p;
}GetKeyDown giúp mỗi lần nhấn phím di chuyển lên hoặc xuống một tầng, còn GetKey sẽ thêm một tầng ở mỗi khung hình khi bạn giữ phím. Mathf.Clamp giữ con số trong phạm vi các tầng của tòa nhà, nên nhấn lên khi đang ở tầng trên cùng sẽ không có tác dụng, còn lần nhấn xuống tiếp theo sẽ đưa sàn thẳng xuống tầng 3. Mathf.MoveTowards đưa sàn trượt về phía tầng tương ứng với tốc độ moveSpeed đơn vị mỗi giây và dừng chính xác tại đó, thay vì nhảy đến vị trí đó trong một khung hình. Vị trí được sao chép, thay đổi rồi gán trở lại, vì bạn không thể đặt riêng transform.position.y.
Thử thách
Trung bìnhDùng các phím mũi tên để di chuyển nhân vật chạy giữa ba làn đường.
- Trong
Update()củaRunner, giảmlaneđi một đơn vị bằnglane--khi nhấnInput.GetKeyDown(KeyCode.LeftArrow), và tănglanelên một đơn vị bằnglane++khi nhấn phím mũi tên phải. - Giữ nhân vật trên đường:
lane = Mathf.Clamp(lane, -1, 1);. - Sao chép
transform.positionvàop, di chuyểnp.xvề phíalane * laneWidthbằngMathf.MoveTowardsvới tốc độlaneSpeed * Time.deltaTime, rồi gán lạip.
Nhấn Chơi, nhấp vào trò chơi rồi đổi làn đường: nhân vật sẽ trượt sang làn khác. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
public class Runner : MonoBehaviour
{
public float laneWidth = 2.5f;
public float laneSpeed = 15f;
private int lane = 0; // -1 là làn trái, 0 là làn giữa, 1 là làn phải
void Update()
{
// Đổi làn bằng các phím mũi tên, rồi trượt về tọa độ x của làn đó
}
}
Tất cả bài học trong Xây dựng trò chơi thực tế
1Văn bản trên màn hình
Canvas và văn bảnHiển thị điểm sốĐịnh dạng sốĐồng hồ đếm ngượcÔn tập: Đồng hồ tốc độ7Điều khiển thời gian
Tạm dừng bằng timeScaleChuyển động chậmThời gian không bị co giãnÔn tập: Bullet Time2Nút bấm và màn hình
Nút bấm và onClickLambdaKết nối trong InspectorBật và tắt bảngThanh máuÔn tập: Cửa hàng nâng cấp5Lưu dữ liệu với PlayerPrefs
Lưu một sốTải với giá trị mặc địnhĐiểm cao nhấtLưu cài đặtÔn tập: Tiền xu trong ngân hàng3Trình quản lý trò chơi
Một script chạy trò chơiSingletonCác trạng thái trò chơiChuyển đổi trạng tháiÔn tập: Trình quản lý vòng chơi6Dự án: trò chơi chạy vô tận
Ba làn đườngChướng ngại vật phía trướcTự luyện tập: Playground Unity