Xem có gì mới trong V2 · Giao diện làm mới, Crew, chuyển Blueprint sang C++, thử nghiệm nhiều người chơi và cập nhật ngay trong editor Đọc nhật ký thay đổi → The V2 giveaway winners are in · 10 accounts won 50M AI tokens each See the winners →
Nâng cao

PaperZD

Xây dựng hoạt ảnh nhân vật 2D trong PaperZD chỉ bằng cách yêu cầu: flipbook từ sprite sheet, animation source, Animation Blueprint, state machine, nhân vật chơi được và kiểm tra khi chơi.

PaperZD của Critical Failure Studio là hệ thống hoạt ảnh mà hầu hết game Paper2D sử dụng: đồ thị hoạt ảnh và state machine cho nhân vật flipbook. Nó miễn phí trên Fab và trên GitHub.

Với tiện ích mở rộng PaperZD, Ultimate Engine CoPilot xây dựng các thiết lập đó cho bạn, từ một sprite sheet đến một nhân vật biết đi và tấn công khi chơi.

Nó đã được thử nghiệm với PaperZD 2.2.4 trên Unreal Engine 5.7.


Bạn cần gì

  • PaperZD, đã cài và bật trong dự án của bạn. Nó dùng plugin Paper2D của chính Unreal, thứ mà PaperZD bật cùng với nó.
  • Một sprite sheet cho nhân vật của bạn, hoặc các flipbook có sẵn.

Cùng với Ultimate Engine CoPilot đã bật tiện ích mở rộng PaperZD.

Khi không có PaperZD, tiện ích mở rộng này không làm gì gây hại. Mọi công cụ PaperZD đều trả lời bằng một thông báo duy nhất cho biết plugin đã được cài, bật và tải hay chưa, và nên làm gì tiếp theo.


Thiết lập

  1. Cài PaperZD từ Fab hoặc GitHub và bật nó trong dự án của bạn. Khởi động lại trình chỉnh sửa nếu Unreal yêu cầu.
  2. Trong CoPilot, mở Cài đặt > Tiện ích mở rộng và bật PaperZD. Nó tắt theo mặc định.
  3. Yêu cầu AI kiểm tra trạng thái PaperZD. Nó báo cáo PaperZD có được tìm thấy không và, nếu không, còn thiếu gì.

Bạn có thể yêu cầu gì

  • “Đây là sprite sheet hiệp sĩ của tôi, 6 cột 13 hàng. Tạo flipbook cho idle, walk và attack theo bốn hướng và thiết lập PaperZD cho nó.”
  • “Thêm một state machine với Idle, Walk và Attack. Chuyển sang Walk khi nhân vật đang di chuyển, quay lại Idle khi nó dừng, và Attack chạy một lần rồi quay lại Idle.”
  • “Cho các hoạt ảnh quay mặt theo hướng nhân vật đang di chuyển.”
  • “Tạo một nhân vật chơi được, dùng WASD để di chuyển và Space để tấn công, có camera phía sau, và một game mode sinh ra nhân vật đó.”
  • “Thêm âm thanh bước chân vào hoạt ảnh walk.”
  • “Đổi nhân vật sang bảng màu đỏ trong khi game đang chạy.”

Đằng sau những yêu cầu đó, AI có thể:

  • Cắt một sprite sheet thành các hoạt ảnh. Một lệnh gọi biến một sheet thành sprite, flipbook, animation sequence, một animation source và một Animation Blueprint. Các hoạt ảnh có nhiều hướng trở thành một sequence đa hướng.
  • Xây dựng đồ thị hoạt ảnh. Các node play sequence, state machine, direction, override slot, chọn theo bool, số hoặc enum, random player và cached animation, rồi nối chúng lại.
  • Xây dựng state machine. State, conduit và jump, với các transition kích hoạt theo một biến, khi hoạt ảnh hiện tại kết thúc, luôn luôn hoặc không bao giờ, có độ ưu tiên và một sequence chuyển tiếp tùy chọn.
  • Thêm notify. Sự kiện tùy chỉnh, âm thanh và hiệu ứng Niagara hoặc particle trên timeline, trong đó các notify tùy chỉnh trở thành các hàm bạn có thể điền nội dung.
  • Thêm skin. Các flipbook thay thế cho từng hoạt ảnh, dùng cho trang phục hoặc đổi bảng màu, được áp dụng trong khi game chạy.
  • Tạo nhân vật. Một nhân vật PaperZD mới do Animation Blueprint điều khiển, hoặc nối một actor có sẵn vào đó. Nó cũng có thể thêm một track PaperZD vào Level Sequence.
  • Kiểm tra khi chơi. Đọc sequence nào đang chạy, đã chạy được bao nhiêu và giá trị của các biến hoạt ảnh, đồng thời chạy, dừng hoặc nhảy tới một hoạt ảnh để kiểm tra transition bằng tay.

Những lỗi nó tránh

PaperZD có vài cái bẫy biên dịch sạch nhưng vẫn không làm gì cả. AI biết về chúng:

  • Quy tắc của một transition mới là “never” cho đến khi được đặt, nên nhân vật sẽ không bao giờ rời Idle.
  • Một biến mà quy tắc đọc phải được ghi ở đâu đó, thường là trong tick của Animation Blueprint. Biên dịch sạch không chứng minh quy tắc có bao giờ thay đổi, nên AI kiểm tra khi chơi.
  • Một sequence chỉ chạy trong Animation Blueprint của chính animation source của nó, nên nó giữ tài nguyên của từng nhân vật với nhau.
  • State và transition được biên dịch trong một đợt ở cuối một nhóm chỉnh sửa, không phải sau mỗi lần chỉnh.
  • Lưới sprite sheet được đọc từ trái sang phải bắt đầu từ trên cùng, nên AI đếm các ô giống như cách PaperZD làm.

Mẹo và thủ thuật

Những điều này đến từ việc xây dựng một ngôi làng nhỏ chơi được bằng PaperZD và CoPilot: một anh hùng, một dân làng, kẻ địch bộ xương và những con sói lang thang. Nó đã được thử nghiệm với PaperZD 2.2.4 trên Unreal Engine 5.7.

Ba điều quan trọng nhất:

  1. Cho AI biết bố cục hàng thật của sheet. Đánh số các hàng từ 0, nói hàng nào là hoạt ảnh và hàng nào là thứ khác, và mở khung đầu tiên của mỗi flipbook để kiểm tra.
  2. Đừng bao giờ xoay actor. Flipbook là một tấm thẻ phẳng, nên hướng phải đến từ việc hoạt ảnh nào đang chạy, không phải từ việc xoay actor.
  3. Đừng tin vào biên dịch sạch. Hãy yêu cầu một lần chơi thử báo cáo hoạt ảnh hiện tại và các biến của nó.

Mô tả sheet chính xác

AI không thể thấy hàng nào của sheet chứa hoạt ảnh nào. Bạn phải cho nó biết.

  • Một sheet xuất từ PixelLab có 6 cột và 13 hàng, mỗi ô 92 pixel, với bốn hướng trong mỗi hoạt ảnh theo thứ tự nam, tây, đông, bắc. Hàng 0 là hàng các tư thế xoay, không phải một hoạt ảnh.
  • Bản xuất đi kèm một file bố cục liệt kê hàng nào chứa hoạt ảnh nào. Hãy dùng nó. Thứ tự khác nhau giữa các nhân vật: trong ngôi làng, anh hùng và pháp sư có walk đầu tiên, bộ xương có attack đầu tiên và con sói có idle đầu tiên.
  • Đếm từ 0 và gọi tên hàng xoay. Trong một phiên, prompt ghi “hàng 1 đến 4 là walk”. AI đếm từ 1, nên mọi hoạt ảnh đều lệch một hàng và anh hùng quay mặt sai hướng.

Hãy viết các hàng như thế này:

Mỗi sheet có 6 cột 13 hàng, mỗi ô 92 pixel. Đánh số các hàng từ 0. Hàng 0 là hàng xoay, bỏ qua. Hàng 1 đến 4 là walk (nam, tây, đông, bắc, 6 khung), hàng 5 đến 8 là attack, hàng 9 đến 12 là idle (4 khung).

Các thiết lập quan trọng

  • Bật pixel art. Texture dùng nearest filtering và không có mip, nên các pixel luôn sắc nét.
  • Pivot ở giữa đáy. Chân luôn ở cùng một chỗ trong mọi khung.
  • Số khung hình mỗi giây. Hãy yêu cầu tốc độ bạn muốn. AI đã dùng 15 cho mọi thứ, khiến một idle 4 khung lặp trong khoảng một phần tư giây. Idle 6, walk 12 và attack 14 trông đúng.
  • Thứ tự hướng. Một sequence đa hướng chạy theo chiều kim đồng hồ từ trên: bắc, đông, nam, tây.
  • Giá trị trên actor đã đặt trong level được ưu tiên. Thời gian hồi hoặc tốc độ đặt trên một actor trong level thắng giá trị mặc định của Blueprint, nên hãy kiểm tra các bản sao đã đặt khi một thay đổi dường như không có tác dụng.

Giữ sprite hướng về camera

Đây là thiết lập đã ngăn sprite xoay, nghiêng hoặc quay cạnh về phía camera:

  • Tắt xoay actor. Controller yaw tắt, orient rotation to movement tắt, controller desired rotation tắt. Nếu để bật, tấm thẻ xoay theo actor và có thể quay cạnh về phía camera.
  • Sinh ra với yaw 0. Yaw sinh ra là 180 làm tấm thẻ ngả ra xa camera cố định trong thế giới.
  • Cố định spring arm vào thế giới. Pawn control rotation tắt, inherit pitch, yaw và roll tắt, collision test tắt. Pitch -40 và yaw -90 hoạt động tốt.
  • Nghiêng tấm thẻ một lần. Khi camera nhìn xuống 40 độ, cho sprite một roll là -40, và nâng nó lên để chân chạm sàn.
  • Di chuyển theo trục thế giới, không theo vector forward hay right của actor.
  • Thể hiện hướng bằng Set Directionality. Đưa vào đó một biến Vector2D tên là Facing. Ghi Facing mỗi tick từ vận tốc và giữ giá trị cuối khi nhân vật dừng lại.

Với camera đó, các phím ánh xạ như sau:

  • D di chuyển theo +X, Facing (1, 0).
  • W di chuyển theo -Y, Facing (0, 1).
  • A di chuyển theo -X, Facing (-1, 0).
  • S di chuyển theo +Y, Facing (0, -1).

Nếu trái và phải hoặc lên và xuống bị đảo, hãy đổi dấu của phần đó trong Facing. Đừng xoay actor để bù lại.

Thử nghiệm khi chơi

  • Một transition không làm gì cho đến khi quy tắc của nó có thể thay đổi. Một quy tắc mới là “never”, và một quy tắc đọc một biến cần có thứ gì đó ghi biến đó, thường là tick của Animation Blueprint. Hãy yêu cầu một lần chơi thử báo cáo hoạt ảnh hiện tại.
  • Cho Facing một giá trị ban đầu. Nó chỉ được ghi khi nhân vật di chuyển, nên một cú tấn công trước bước đầu tiên đọc ra số không. Giá trị mặc định là nam sẽ khắc phục điều này.
  • Cho anh hùng quay mặt về mục tiêu. Nếu cú tấn công cần trúng thứ gì đó ở một bên, hãy yêu cầu AI đặt Facing hướng về kẻ địch gần nhất trước khi vung.

Một phiên thực tế

Clip hợp tác được xây dựng trong bốn prompt trong chat của CoPilot, với agent Claude Code. AI tự chạy các lần chơi thử của mình và sửa những gì nó tìm thấy. Thời gian lấy từ một máy.

  1. Hai nhân vật được nhập, với các state machine idle, walk và attack: khoảng 2,5 phút.
  2. Một anh hùng chơi được (WASD để di chuyển, Space để tấn công), một camera spring-arm, một game mode và một dân làng đi giữa ba điểm: khoảng 7 phút.
  3. Một kẻ địch bộ xương đuổi theo và tấn công, điểm máu và bộ đếm máu trên màn hình: khoảng 7 phút.
  4. Những con sói lang thang, thảo mộc thu thập được và bộ đếm thảo mộc: khoảng 7 phút.

Diện mạo là một công việc riêng

AI xây dựng hoạt ảnh và gameplay. Diện mạo của clip được thiết lập trong level, không phải do AI:

  • Ánh nắng ấm và ánh đèn lồng.
  • Bloom, vignette và độ sâu trường ảnh nông để có cảm giác tilt-shift.
  • Một material emissive không chiếu sáng (unlit) trên các nhân vật.

Hãy bắt đầu với material unlit và độ phơi sáng cố định. Chỉnh độ phơi sáng bằng mắt qua nhiều vòng tốn nhiều thời gian hơn lợi ích nó mang lại.

Giới hạn

  • AI không biết mỗi hàng của sheet chứa hoạt ảnh nào. Bạn phải cho nó biết.
  • Kẻ địch đi thẳng về phía anh hùng, không tìm đường vòng qua các vật thể.
  • Ở góc chính xác 45 độ, hai trục bằng nhau và hoạt ảnh chọn đông.
  • Máu dừng ở 0. Không có gì khác xảy ra cho đến khi bạn yêu cầu một cái chết.
  • Nó không thể đọc trạng thái hoạt ảnh ở giữa lúc một phím đang được giữ, và nó đã nói như vậy thay vì đoán.

Quyền

Đọc thì tự do: kiểm tra một asset, một đồ thị hay một hoạt ảnh đang chạy không bao giờ hỏi. Các thay đổi tuân theo thiết lập Ask Before Edit hoặc Auto Edit của bạn, giống như mọi công cụ khác.


Cách nó hoạt động

  • Không có liên kết giữa các plugin. Tiện ích mở rộng chỉ truy cập PaperZD bằng reflection, nên Ultimate Engine CoPilot build và chạy như nhau dù có cài PaperZD hay không, và tiện ích mở rộng tiếp tục hoạt động qua các phiên bản PaperZD có cùng thiết kế. Nếu một bản cập nhật đổi tên thứ gì đó, công cụ sẽ nêu tên trường bị thiếu thay vì đoán.
  • Mọi nơi cùng lúc. Các công cụ hoạt động trong khung chat của CoPilot, trong các MCP client bên ngoài như Claude Code và Cursor, và trong các coding agent. Xem Tích hợp MCP.
  • 39 công cụ. Các công cụ soạn thảo, kiểm tra và chạy khi chơi cho source, sequence, notify, skin, Animation Blueprint, đồ thị, state machine, nhân vật và Sequencer.

Xem Tiện ích mở rộng để biết các tiện ích mở rộng hoạt động thế nào, và Kiểm thử chơi để biết cách AI kiểm tra một game đang chạy.