Delegate là gì ?

Delegate có thể hiểu nôm na là một thuộc tính của Unreal cho phép bạn theo dõi hành động của một actor bằng cách gắn thiết bị theo dõi vào actor đó (Delegate) (này mình giải thích vui thôi nha chứ nghĩa của delegate không phải vậy :v).

Ví dụ dễ hiểu cho ứng dụng delegate có thể như sau:

Ảnh 1. Hình vui minh họa

Giả sử bạn có một chiếc xe, và bạn muốn chiếc xe thông báo lại cho bạn khi có kẻ trộm tiếp xúc. Làm thế nào để chiếc xe có thể báo lại cho bạn ? Bạn cho chiếc xe một thiết bị cảm ứng thông minh có kết nối qua wifi chẳng hạn, khi chiếc xe bị tiếp xúc, thiết bị sẽ thông qua wifi gửi lại thông báo vào điện thoại có kết nối internet.

Như vậy trong ví dụ trên, thiết bị thông minh ở xe có thể hiểu là delegate trong Unreal Engine (vui thôi nhé).

Cách tạo delegate

Trong ví dụ sau, mình sẽ tạo một actor trống để thực hiện. Các bạn thao tác tạo actor như bình thường nhé.

Để tạo delegate, các bạn chú ý tới vị trí sau ở blueprint editor của actor vừa tạo:

Ảnh 2. Tạo delegate OnThiefStolen

Ở hình trên, mình đã tạo một delegate tên OnThiefStolen để giống ví dụ hồi đầu bằng cách ấn vào biểu tượng + ở bên phải.

Các thao tác với delegate bao gồm

Ảnh 3. Các thao tác với delegate
  • 1: Thông báo cho bất cứ object nào có kết nối với actor này
  • 2: Thiết lập kết nối với actor này thông qua delegate
  • 3a: Gỡ kết nối với actor này từ một object khác
  • 3b: Gỡ kết nối với actor này từ mọi object

Ngoài ra bạn cũng có thể cho đi kèm các thông số khác với delegate bằng cách click vào delegate vừa tạo và qua phần tab Details

Ảnh 4. Details của một delegate

Ấn vào biểu tượng + (khoanh màu xanh) để tạo một thông số đi kèm.

Trong ví dụ này, mình sẽ tạo một Vector tên Location, mục đích là để phát kèm vị trí của actor này khi gọi delegate

Ảnh 5. Input Location vector

Vậy là đã xong tất cả bước để thiết lập một delegate.

Để ví dụ thêm sinh động, mình sẽ cho actor này có một cái trigger box, mục đích là để khi ai đó overlap, thì delegate sẽ được gọi để thông báo

Ảnh 6. Thêm trigger box vào

Sử dụng delegate

Trước tiên, ta cần actor này tồn tại ở thế giới, trong ví dụ này mình sẽ dùng hàm “Spawn Actor From Class” từ class nhân vật chính

Ảnh 7. Spawn actor ta tạo trên

Lưu ý: Các bạn nhớ set class của actor có delegate ta tạo trên vào mục Class nhé.

ảnh 7, mình chỉ đơn giản là tạo ra actor trên ở vị trí 5m trước vị trí của nhân vật chính. Kết quả sẽ ra như sau:

Ảnh 8. Actor có delegate vừa được tạo ra

Ok, như vậy đã xong các bước chuẩn bị, bây giờ mục tiêu chúng ta cần đó là khi nhân vật đi vào cái box đó, một thông báo sẽ vang lên ở nhân vật, được gọi từ cái hộp trên.

Quay là actor có delegate, mình sẽ gọi là DelegateActor cho dễ, ta thiết lập như sau:

Ảnh 9. Gọi delegate khi có vật thể overlap box

Như vậy, khi có bất cứ vật thể nào overlap chiếc hộp, một thông báo kèm vị trí (Location) vật thể sẽ được phát đi cho bất kì cái gì kết nối với DelegateActor.

Quay lại class nhân vật chính, hãy thiết lập kết nối với DelegateActor bằng Bind Event

Ảnh 10. Thiết lập kết nối với DelegateActor

Khi nhận được thông báo, ta sẽ in ra dòng chữ đỏ vị trí đi kèm thông báo.

Và khi ta đi vào chiếc hộp, kết quả sẽ là

Ảnh 11. Vị trí của ta khi đi vào chiếc hộp

Như vậy, ta đã hoàn thành một ví dụ đơn giản với Delegate 😀

Kết luận

Delegate là một thuộc tính rất hữu ích của Unreal, cho phép người dùng, người sở hữu vật thể kiểm soát được sự kiện của một vật thể khác một cách linh hoạt. Vì thế hãy luyện tập nhiều lên để hiểu rõ hơn nhé. Hẹn gặp lại các bạn ở bài viết sau!