Unreal Engine 5 đã cung cấp rất nhiều plugins cũng như tính năng mới tới người dùng. Một tính năng mình thấy rất thích đó là Motion Warping.

Nói tóm tắt:

  • Motion Warping thay đổi Root Motion giữa các frame được định trước từ Montage.
  • Motion Warping thay đổi được transform của animation tại runtime bằng logic từ blueprint hay c++ mà không phải sửa animation.

Trong project mẫu Ancient Valley của Epic Games, nó được sử dụng trong đoạn nhảy qua tảng đá:

Deverse World Attack Motion Warping

Có rất nhiều ứng dụng của Motion Warping, ví dụ như khi player thực hiện combat, cần animation đấm/đá/tấn công quay vào hướng đối tượng.

Trong ví dụ sau, mình sẽ ứng dụng vào sự kiện tấn công tầm gần, sử dụng ví dụ của Paragon : Crunch.

Trước tiên, ta hãy bật plugin Motion Warping từ Plugins.

Trước tiên ta có thể thêm 1 số mục tiêu cần tấn công vào. Mình sẽ sử dụng class nhân vật cơ bản của Unreal, bạn có thể sử dụng gì cũng được.

Mục tiêu của mình là làm cho Crunch tấn công theo các mục tiêu đặt sẵn cũng như là quay hướng đánh vào đúng đối tượng.

Trước tiên ta phải update animation để sử dụng Motion Warping.

Mở animation đánh lên, và tick vào Enable Root Motion:

LƯU Ý: Motion Warping chỉ dùng được khi animation có Root Motion nhé, tức là xương root có thay đổi về vị trí trong animation data.

Bởi vì animation paragon không có Root Motion, nên mình phải sửa tay animation xương root cho di chuyển lên trước. Bạn có thể dễ dàng làm việc này bằng các phần mềm 3D hoặc là dùng additive trong UE rồi xuất ra lại file animation.

Sau khi xong, ta mở montage tấn công lên, trong trường hợp này là mình dùng file Ability_Combo_03_Montage đã có sẵn.

Thay đổi vùng warp theo ý bạn muốn, thông thường sẽ là khi bắt đầu tấn công và kết thúc khi đã ra đòn.

Như vậy là Crunch sẽ warp vị trí và góc quay trong đoạn thời gian vạch ở vùng MotionWarping.

Bước cuối cùng là setup thuộc tính, click vào MotionWarping, bên vùng Details, setup như sau:

  • Root Motion Modifier: loại warp, phổ biến là Skew Warp
  • Warp Target Name: tên sự kiện Warp, bạn có thể set thành gì cũng được. Tên sẽ được sử dụng để cập nhật thông tin cho montage từ logic game.
  • Warp Translation: có muốn warp vị trí không, mặc định là có.
  • Ignore ZAxis: bỏ qua warp theo trục thẳng (trên/dưới).
  • Warp Rotation: có muốn warp góc quay không, mặc định là có.

Như vậy là đã hoàn thành khâu setup cho montage. Ta chuyển qua setup logic cho BP.

Bộ nhân vật Paragon : Crunch đã cung cấp sẵn cho ta blueprint nhân vật CrunchPlayerCharacter. Mở nó lên và thêm Motion Warping component vào vùng Components.

Từ component MotionWarping, kéo thả vào graph và tìm kiếm hàm Add or Update Warp Target from Location and Rotation:

Ở logic trên, mình chỉ đơn giản là lấy blueprint nhân vật mẫu BP_ThirdPersonCharacter của UE trong level, lấy vị trí của nhân vật nối vô Target Location, sau đó tính toán góc cần quay của đối tượng với Crunch. Mình chỉ dùng Target Rotation Z là tại vì mình không muốn Crunch quay lên trời cũng như nghiêng người.

Bước cuối cùng chỉ là play animation montage đã setup ở trên.

LƯU Ý: lí do mình ngắt 2 node Play Anim Montage ở trên là vì animation của chúng không có root motion. Nếu bạn có thì cứ nối bình thường nhé.

Thành quả: