Để có một hệ thống AI cho game đua xe tốt, trước hết ta phải có một game đua xe tốt, và để đạt được điều này, người làm game cần phải có kiến thức cần thiết về lập trình 3D và thiết kế game.
2.1.1. Vật lý game
Hệ thống vật lý của Unity tương đối dễ làm quen cho người mới bắt đầu thiết kế game trên nền tảng này. Việc di chuyển các đối tượng trong game của Unity có thể được thực hiện bằng nhiều cách khác nhau. Cách làm này thường được áp dụng khi ta muốn di chuyển tuyến tính một đối tượng khơng trực tiếp tương tác với các đối tượng khác trong game và không phụ thuộc vào vật lý của game (camera, các đối tượng UI, . Ngồi ra, Unity cịn hỗ trợ hệ thống vật lý giúp việc hiện thực hoá va chạm, trọng lực hay áp dụng lực lên đối tượng trở nên dễ dàng hơn. Để điều khiển đối tượng xe đua, ta sẽ sử dụng hệ thống vật lý này.
Trong thực tế, có rất nhiều yếu tố ảnh hưởng đến việc vận hành của một chiếc xe. Để lược giản hoá, ta chỉ quan tâm đến những yếu tố có ảnh hưởng lớn đến trải nghiệm đua xe của người dùng. Đó là những yếu tố như:
− Gia tốc: quyết định xe tăng tốc nhanh hay chậm
− Tốc độ tối đa: tốc độ tối đa và xe có thể đạt được, khi tiến và khi lùi
− Trọng lượng: trọng lượng xe trong trường hợp cần tính tốn lực va chạm
12
− Độ lướt: quyết định gia tốc của xe trở về không nhanh hay chậm nếu người dùng khơng cịn bấm nút tăng tốc
− Ma sát phương ngang của bánh xe: được hiểu như độ bám đường của bánh xe, ảnh hưởng đến độ trơn của bánh xe.
− Góc quay của bánh xe dẫn hướng: Góc quay rộng đồng nghĩa với xe sẽ ôm cua một cách dễ dàng hơn
− Thông số hệ thống treo: bao gồm các thông số như lực nén, độ đầm của lò xo, biên độ dao động của bánh xe so với lò xo. Hệ thống có thể được áp dụng thơng qua component WheelCollider trong Unity.
Sử dụng kiến thức toán học và vật lý, ta có thể tính tốn để xe tăng tốc và rẽ hướng theo ý thích.
Ví dụ, ở mỗi frame, vận tốc của xe khi xe đang chạy trên đường có thể được lập trình như sau:
𝑣⃑⃑⃑ = 𝑐𝑙𝑖𝑝[(𝑣𝑓 ⃑⃑⃑⃑⃑⃑⃑⃑ + 𝐹𝑓−1 ⃑⃑⃑⃑⃑⃑⃑⃑ ∗ 𝑎 ∗ ∆𝑡), 𝑣𝑓𝑤𝑑 𝑚𝑎𝑥]
Trong đó, 𝑣⃑⃑⃑⃑⃑⃑⃑⃑ chỉ vector vận tốc của xe ở ở frame trước, 𝐹𝑓−1 ⃑⃑⃑⃑⃑⃑⃑⃑ 𝑓𝑤𝑑 là vector chỉ hướng của mũi xe, 𝑎 là gia tốc của xe; và độ lớn của 𝑣⃑⃑⃑ không vượt quá 𝑣𝑓 𝑚𝑎𝑥 là tốc độ tối đa mà xe có thể đạt được.
Nhưng để tạo nên một game đua xe thú vị, chỉ tăng tốc và rẽ là không đủ. Trong hầu hết các game đua xe hiện đại, người thiết kế game ln tìm cách thêm vào những cơ chế để tăng độ phức tạp và chiều sâu cho game. Cơ chế được thêm vào cho game của chúng ta là một cơ chế mang tính biểu tượng cho dịng game đua xe, đó là drift.
Lê bánh, hay trôi bánh, hay drift, là một kỹ thuật phổ biến trong đua xe. Hiện tượng lê bánh xảy ra khi góc trượt của bánh sau lớn hơn góc trượt của bánh trước và hầu hết các
13
game đua xe đều áp dụng cơ chế này theo cách này hoặc cách khác bởi sự thoả mãn mà nó mang lại cho người chơi khi sử dụng drift thành cơng.
Hình 2.1. Hai chiếc xe đua thể thao đang thực hiện drift
Với hướng hiện thực hoá vật lý ở trên, việc áp dụng thêm vật lý trượt cho xe là tương đối khó khăn. Vì thế, ta hướng đến một giải pháp khác: thay đổi thông số vật lý của đối tượng xe đua để tạo cảm giác xe đang lê bánh trên mặt đường. Cách thực hiện như sau:
− Những thông số vật lý mà chúng ta sẽ thay đổi là ma sát phương ngang của bánh xe và góc cua của xe. Bằng cách giảm ma sát phương ngang và tăng góc cua của xe, ta có thể mang lại cảm giác xe đang drift.
− Để khuyến khích người chơi sử dụng drift, góc quay của bánh xe trước nên được đặt ở mức thấp, vừa đủ để ôm cua. Các thông số vật lý sẽ chuyển sang dạng drift khi ở các điều kiện nhất định sau:
14
− Xe sẽ bắt đầu vào trạng thái drift khi gia tốc xe đủ lớn và người chơi bấm nút tăng tốc và phanh cùng một lúc hoặc khi phương gia tốc của xe và mũi xe tạo thành một góc quá lớn (do va chạm làm đổi hướng vector gia tốc). Xe ngừng drift khi được điều hướng trở lại.
2.1.2. Thiết kế & Cân bằng game
Cân bằng game là một phạm trù ít nhiều mang tính cảm tính, bởi khơng có một quy chuẩn nhất định nào cho việc cân bằng game và kỹ năng của người chơi không thể nào đồng đều, nhưng lại là một phần khơng thể thiếu trong q trình làm game. Một thử thách có thể khó đối với người chơi này và dễ với người chơi khác. Điều duy nhất chúng ta có thể làm là thu hẹp khoảng cách này lại, đồng thời giữ cho trải nghiệm chơi game của người chơi được thú vị bằng cách tiến hành cho người dùng chơi thử và ghi nhận những góp ý thu được.
Ngoài ra, để trải nghiệm chơi game được mới mẻ, ta cần phải thiết kế nhiều loại xe với nhiều đặc tính nổi bật. Sau q trình thu thập ý kiến, tôi quyết định sử dụng 1 nguyên mẫu xe đua và tạo ra 6 biến thể với những đặc tính vật lý khác nhau.
Để tránh hiện tượng dây thun xảy ra, ta cần đảm bảo sự cách biệt rõ ràng giữa AI cấp độ Dễ, Vừa và Khó. Ta có thể sử dụng thuật tốn hay thủ thuật để cân bằng độ khó trong lúc game diễn ra, nhưng chỉ ở mức độ vừa phải. Như vậy, với đề tài này, sẽ có 18 phiên bản AI cho 6 loại xe ở 3 cấp độ được triển khai.
Đồng thời, để cho gameplay không bị nhàm chán, cần phải có một mức độ ngẫu nhiên ở mỗi lần đua.
15
16