ue5 – Jake Tee https://jakesto.com Game Dev Blog Sun, 30 Jun 2024 08:27:44 +0000 en-US hourly 1 https://wordpress.org/?v=6.8.1 https://jakesto.com/wp-content/uploads/2022/07/cropped-pngwing.com_-32x32.png ue5 – Jake Tee https://jakesto.com 32 32 194548219 Blueprint Editor Script https://jakesto.com/blueprint-editor-script/?utm_source=rss&utm_medium=rss&utm_campaign=blueprint-editor-script Sun, 30 Jun 2024 08:00:00 +0000 https://jakesto.com/?p=1026 Nếu anh em nào nghĩ là unreal chỉ có thể dùng C++ để code thì hôm nay tôi sẽ giới thiệu cho anh em 1 plugin có thể giúp ta code bằng python.

Cài đặt

Trước tiên ta cần phải cài đặt Plugin cho project. Từ giao diện chính của Unreal, anh em vào góc trên bên trái chọn Edit->Plugin.

Sau đó ở thanh bên trái của giao diện plugin thì chọn vào mục Scripting, hoặc ở thanh search ta có thể ghi tên plugin ra sau đó click chuột vào để enable 2 plugin là: Editor Scripting UtilitiesPython Editor Script Plugin

Sau đó trên máy an hem phải có sẵn IDE để code python có thể là bất kỳ IDE nào.

Sau đó ở Unreal anh em vào phần Project Settings (Edit->Project Settings)

Ở cột bên trái, anh kéo xuống dưới sẽ thấy 1 mục tên Python, chọn nó sau đó ở phần nội dung bên phải, tại Additional Paths anh em ấn dấu + để tạo 1 đường dẫn tới nơi trong project anh em lưu file python mình sử dụng. Đồng thời enable Remote execution (trong trường hợp bạn cũng dùng vscode).

*Nếu anh em sử dụng vscode thì trong vscode ta phải tải thêm Unreal Engine Python.

Cuối cùng là restart lại engine là có thể sử dụng được.

Cách sử dụng

Anh em vào đường dẫn vừa gắn trong setting để tạo file python. Như mình thì tạo là Tutorial.py, sau đó mở file lên.

Sau đó nhập bất cứ lệnh print nào để test:

Trên phần Debug Log, để có thể dùng các lệnh của python thì anh em cần chuyển Cmd sang Python.

Sau đó cho chạy code, nếu trên Debug Log của anh em in đúng thì đã hoàn thành rồi, bây giờ ta đã có thể code python trong unreal engine.

Trong trường hợp anh em cần chạy lại code file python (*Lưu ý là file python không phải hàm trong file). Anh em cần gọi import và gọi hàm reload.

from importlib import reload

sau đó gọi reload(tên_file)



Cuối cùng là ta đã có thể code unreal hoàn toàn bằng python.

Đây là 1 số đường dẫn hướng dẫn chi tiết bằng tiếng anh cũng như video clip giải thích nếu có anh em nào muốn tìm hiểu sâu hơn cách sử dụng cho plugin này:

Cuối cùng là tất cả các thư viện mà anh em có thể sử dụng cho unreal, mình sẽ để đây:

]]>
1026
Rich Text Block – Thay đổi cấu trúc chữ như lập trình web https://jakesto.com/rich-text-block-thay-doi-cau-truc-chu-nhu-lap-trinh-web/?utm_source=rss&utm_medium=rss&utm_campaign=rich-text-block-thay-doi-cau-truc-chu-nhu-lap-trinh-web Sun, 10 Dec 2023 03:33:19 +0000 https://jakesto.com/?p=1005 Nếu anh em nào từng code web thì sẽ quá quen với cấu trúc để thay đổi kiểu chữ <p></p> hay là <title></title>

Tuy nhiên mặc định trong Unreal Engine lại không có sẵn vậy. Giả sử ta có một đoạn chữ sau:

“Tôi yêu lập trình game”

Với web, sẽ rất dễ để ta thay đổi giả sử chữ game thành in đậm, với cú pháp đơn giản là:
<title>Tôi yêu lập trình <p>game</p></title>

Còn trong Unreal, ta sẽ phải làm như thế này:

May mắn là do chữ game ở cuối, nên ta chỉ cần 2 TextBlock, nếu không sẽ cần nhiều hơn thế chỉ cho một đoạn chữ đơn giản.

Càng nhiều text block, càng tốn tài nguyên xử lí thêm. Để giải quyết vấn đề này, Unreal đã cung cấp một giải pháp tương tự như code web, đó là Rich Text Block.

Cách sử dụng

Tạo DataTable với cấu trúc dữ liệu là RichTextStyleRow

Mình sẽ đặt tên là TextStyles.

Khi mở lên ta sẽ thấy một bảng trống, ấn Add để thêm dữ liệu mới vào.

Ở cột Row Name, đó sẽ là tên cú pháp của chúng ta. Trong ví dụ này mình thêm p để sử dụng cho in đậm chữ.

Ở phần tùy chỉnh bên dưới sẽ, ta cũng sẽ chọn Font Family thành Roboto, và Typeface là Bold.

Cuối cùng, quay lại ví dụ trên, ta sẽ bỏ đi 2 TextBlock cũ, và thay vào bằng 1 RichTextBlock

Ở phần cài đặt, chọn TextStyles table mà ta đã tạo ở bước trước.
Lúc này chữ sẽ lỗi do không tìm thấy style mặc định, ta có thể tick vào Override Default Style và set style mặc định cho nó:

Cuối cùng, ta sẽ format dòng chữ “Tôi yêu lập trình game” -> Tôi yêu lập trình <p>game</> và kết quả:

Lưu ý: Rich Text Block có vẻ vẫn chưa hỗ trợ cấu trúc tròng theo kiểu <h1>hello<p>world</></> nên anh em lưu ý.

]]>
1005
Unreal Engine 5 – Motion Warping https://jakesto.com/unreal-engine-5-motion-warping/?utm_source=rss&utm_medium=rss&utm_campaign=unreal-engine-5-motion-warping Sat, 02 Jul 2022 08:58:28 +0000 https://jakesto.com/?p=903 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ả:

]]>
903