Interface là gì ?
Interface dịch theo wikipedia thì nghĩa là một ranh giới chung cho phép hai hay nhiều thành phần có thể trao đổi thông tin với nhau.
Nhưng trong Unreal, để dễ hiểu nhất, các bạn có thể hiểu Interface như là một cách để cung cấp hai hay nhiều chức năng chung, mà mỗi chức năng, có thể được tạo thành bằng nhiều cách hay logic khác nhau ở mỗi object dùng interface đó.
Ví dụ: ta có một Interface mang tên “chức năng động vật”, bao gồm các chức năng căn bản như kêu, ăn, đi,… Interface này đều có tồn tại trên tất các loài động vật, và mỗi loài, sẽ có một kiểu kêu, ăn hay đi khác nhau. Nhưng chúng đều có cùng dùng chung hai hay nhiều chức năng trong Interface “chức năng động vật đó”.
Lợi ích của dùng Interface:
- Tạo sự đồng điệu trong chức năng nhưng đa dạng về cách thực hiện
- Giúp logic xử lí đơn giản và nhanh hơn
Cách tạo Interface
Để tạo một interface, ta chuột phải vào Content Browser -> Blueprints -> Blueprint Interface
Để minh chứng cho ví dụ đầu bài, ta sẽ tạo một Interface và đặt là BP_AnimalInterface
Và giao diện của Interface sẽ như sau
Lưu ý: Interface chỉ cho phép ta tạo chức năng, chứ không cho phép ta tạo biến nhé!
Hãy bắt đầu tạo 2 hàm là Bark (sủa) và Eat (ăn).
Tuy nhiên khi ta thử chỉnh chức năng hàm, thì không được ?!
Lí do đơn giản là vì Interface chỉ cung cấp cho ta định nghĩa của chức năng, còn cách thực hiện hay thao tác ra sao, ở các object dùng Interface phải thực hiện.
Tips: Các bạn có thể thêm tham biến và giá trị cho các hàm trên bằng cách:
Trong ví dụ này, mình sẽ cho tham biến của hàm Eat là lượng gram đồ ăn ta cung cấp, và giá trị trả lại là lượng gram đồ ăn con vật đó thực sự ăn.
Ok như vậy ta đã xong khâu setup của Interface. Qua phần tiếp theo ta sẽ chỉ định cho các con vật (Actor) dùng Interface mang tên “chức năng động vật” này!
Sử dụng Interface
Trước khi dùng Interface, hãy tạo ra 2 Actor động vật là BP_Dog và BP_Cat
Để hồi sau dễ phân biệt con nào với con nào, mình cho con chó là hình quả cầu và con mèo là hình cái hộp :v
Sau đó, chúng ta cho cho và mèo cùng dùng Interface BP_AnimalInterface bằng cách sau:
Lưu ý: cách này áp dụng cho mọi Actor hay kể cả Object nhé!
Đầu tiên chọn Class Settings ở thanh Nav trên, Tab details của class sẽ xuất hiện như ảnh dưới
Ở mục Interfaces, ấn nút Add để xổ xuống một danh sách các interface đang có, và chọn BP_AnimalInterface ta tạo trên. Kết quả như hình
Tips: một actor hay object có thể có một hay nhiều Interface nhé!
Như vậy đã xong, làm tương tự với con vật còn lại và ấn compile phía trên!
Tiếp theo, ta hãy bắt đầu định nghĩa cách thực hiện các chức năng như Bark và Eat đã tạo trên. Trong Event Graph, chuột phải bất kì đâu, và gõ Event Bark để sự kiện Bark được tạo ra
Đối với hàm/chức năng Eat, bởi vì nó chứa tham biến và giá trị trả lại, nên ta có thể vào mục sau để tìm
và sau đó đơn giản là double click vào tên Eat để chỉnh.
Tips: ngoài cách chuột phải Event Graph và kiếm Event Bark, các bạn cũng có thể chuột phải vào tên Bark như ảnh 10, và chọn Implement Function.
Cho đơn giản, ta sẽ cho BP_Dog in ra “gau gau” và BP_Cat in ra “meow meow” khi kêu.
Với hàm Eat, ta sẽ cho mèo trả lại một nửa lượng thức ăn nó được nhận, và chó là ăn 90% thức ăn nó được cho.
Như vậy là ta đã xong khâu tạo ra chó và mèo. Giờ ta hãy đặt chúng vào level để ta có thể bắt đầu nuôi (lol).
Bây giờ ta sẽ thử coi đặc tính của Interface như thế nào. Vào class BP_MyCharacter ta tạo ở bài trước hay một class nhân vật bất kì nào của bạn, ở mục BeginPlay, ta thêm vào như sau
Mình sẽ tóm gọn mục đích như sau:
- Khi vừa vào, ta cho dừng 3s (Delay)
- Sau đó ta sẽ lướt qua tất cả con vật, và bảo chúng kêu (gọi hàm Bark với lá thư)
- Sau khi kêu, ta sẽ dừng 1.5s tiếp
- Và cuối cùng là cho mỗi con 200gr thức ăn (gọi hàm Eat với giá trị Feed Gram là 200) và in ra lượng thức ăn chúng đã thực sự ăn
Kết quả sẽ như sau:
Như vậy ta có thể thấy, mọi thứ diễn ra đúng như những gì ta đã thực hiện trước đó, mèo sẽ kêu meow meow và chỉ ăn đúng 50% của 200gr (tức 100gr), chó sẽ kêu gau gau và ăn 90% của 200gr (tức 180gr).
Như vậy là ta đã hoàn thành một ví dụ đơn giản của sử dụng Interface trong Unreal!
Kết luận
Interface thực ra là một thứ khá hữu ích không chỉ trong Unreal nói riêng mà ở lập trình nói chung.
Một ví dụ cao hơn là, khi Unreal muốn ứng dụng chạy được đa nền tảng mà không phải lo mỗi nền tảng phải tạo lại cấu trúc, Unreal sẽ sử dụng Interface gọi là Subsystem. Subsystem Interface sẽ bao gồm rất nhiều hàm khác nhau mà Unreal sẽ dùng cho ứng dụng, và việc duy nhất để cho ứng dụng của Unreal chạy được (một phần) ở các nền tảng khác đó là thiết lập hàm và chức năng mà Unreal đã định sẵn.
Thôi lòng vòng cao xa quá =)) Nói chung căn bản của Interface là như trên nha! Hẹn gặp lại các bạn post sau.
Comments