PATH FOLLOW
AI player là phần khá quan trọng tạo nên sự hấp dẫn của game. Việc thiết kế và tạo ra các AI player tốt phụ thuộc vào khá nhiều yếu tố khác nhau. Tuy nhiên trong những yếu tô ấy chính là việc xây dựng đường đi cho AI player. Tạo được các đường đi cho AI chính là tạo nên các mức độ khác nhau về khả ...
AI player là phần khá quan trọng tạo nên sự hấp dẫn của game. Việc thiết kế và tạo ra các AI player tốt phụ thuộc vào khá nhiều yếu tố khác nhau. Tuy nhiên trong những yếu tô ấy chính là việc xây dựng đường đi cho AI player. Tạo được các đường đi cho AI chính là tạo nên các mức độ khác nhau về khả năng tìm đối thủ, tránh chướng ngại vật, …. Trong bài viết này sẽ giới thiệu cách khá đơn giản để xây dựng đường đi và các kĩ thuật để định hướng cho AI player trong Unity sẽ đi đúng đường đã được xây dựng.
1. Bước1: Tạo mảng để chứa các điểm trên đường đi mà nhân vật phải đi qua. Như thế tập hợp tất cả các điểm ấy sẽ chính là đường đi mà nhân vật sẽ đi qua:
private Vector3[] path;
Khởi tạo các biến để lưu vị trí của hiện tại của nhân vật và chỉ số của điểm đó trong mảng đường đi để ta có thể xác định được điểm tiếp theo mà nhân vật cần đi tới:
public float speed = 10.0f; public float minDistance = .0f;
2. Bước2: khởi tạo các giá trị ban đầu cho currentPosition là điểm đầu đường đi và currentIndex là 0
void Start () { currentPosition = path[0]; currentIndex = 0; }
3. Bước 3: viết hàm di chuyển tới điểm tiếp theo trên đường đi trong mảng đường đi path:
void MoveNextTranform() { Vector3 direction = currentPosition - transform.position; Vector3 moveVector = direction.normalized * speed * Time.deltaTime; transform.position += moveVector; transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), * Time.deltaTime); }
4. Bước 4: Trong hàm update ta gọi hàm di chuyển MoveNextTranform() sau đó kiểm tra khi player đã đạt được tới điểm cần đến thì ta tăng biến index và set lại biến currentTranform. Kiểm tra biến index so với độ dài của mảng đường đi để biết đã đi đến điểm cuối cùng trong mảng đường đi hay chưa.
void Update () { MoveNextTranform(); if(Vector3.Distance(currentPosition, transform.position) < minDistance) { ++currentIndex; if(currentIndex > path.Length - ) { currentIndex = 0; } currentPosition = path[currentIndex]; } }
sau đó ta có thể cài đặt các vị trí của đường đi trực tiếp trên giao diện của Unity như hình dưới:
như vậy ta đã có được đường đi và điều khiển cho nhân vật đi đúng với đường đã cài đặt sẵn. Ngoài ra chúng ta có thể mở rộng việc ứng dụng việc này trong việc lấy thông tin đường đi bằng sự kiện click chuột để lưu lại các vị trí của chuột vào hàng đợi. Để sử dụng hàng đợi ta cần thêm thư viện:
using System.Collections.Generic;
khởi tạo hàng đợi để lưu đường đi và thứ tự đường đi
Queue path2 = new Queue();
Việc thêm các vị trí mới vào hàng đợi chính là việc lấy vị trí của các việc click chuột, phần code này sẽ thực hiện trong hàm update
if(Input.GetButtonDown("Fire1")) { Vector3 clickPos = Input.mousePosition; path2.Enqueue(clickPos); }
như vậy currentPosition sẽ là phần tử đầu tiên của hàng đợi nên ta chỉ cần lấy phần tử đầu tiên của hàng đợi gán cho currentPosition.
currentPosition = path2.Dequeue();
Sau mỗi lần đạt được currentPostion ta thực hiện lại việc lấy phần tử đầu tiên cho tới khi hàng đợi rỗng là ta đã đi được đúng đường đi từ đầu tới cuối với việc truyền đầu vào là các vị trí click chuột. Trên đây giới thiệu cách khá đơn giản để có thể tạo đường đi có sẵn cho AI player hoặc tạo đường đi theo yêu cầu của người chơi cho nhân vật nhập vai theo trình tự các click chuột.