PaperZD
สร้างแอนิเมชันตัวละคร 2D ใน PaperZD แค่สั่ง: flipbook จาก sprite sheet, แหล่งแอนิเมชัน, Animation Blueprint, state machine, ตัวละครที่เล่นได้ และการตรวจใน PIE
PaperZD โดย Critical Failure Studio คือระบบแอนิเมชันที่เกม Paper2D ส่วนใหญ่ใช้: กราฟแอนิเมชันและ state machine สำหรับตัวละครแบบ flipbook ใช้ได้ฟรีบน Fab และ GitHub
ด้วยส่วนขยาย PaperZD Ultimate Engine CoPilot สร้างการตั้งค่าเหล่านั้นให้คุณ ตั้งแต่ sprite sheet ไปจนถึงตัวละครที่เดินและโจมตีได้ตอนเล่น
ทดสอบกับ PaperZD 2.2.4 บน Unreal Engine 5.7
สิ่งที่ต้องมี
- PaperZD ที่ติดตั้งและเปิดใช้ในโปรเจกต์ของคุณ มันใช้ปลั๊กอิน Paper2D ของ Unreal เอง ซึ่ง PaperZD จะเปิดให้พร้อมกัน
- sprite sheet สำหรับตัวละครของคุณ หรือ flipbook ที่มีอยู่แล้ว
และ Ultimate Engine CoPilot ที่เปิดส่วนขยาย PaperZD ไว้
หากไม่มี PaperZD ส่วนขยายนี้จะไม่ทำอะไรที่เป็นอันตราย เครื่องมือ PaperZD ทุกตัวจะตอบกลับด้วยข้อความเดียวที่บอกว่าปลั๊กอินติดตั้ง เปิดใช้ และโหลดแล้วหรือไม่ และต้องทำอะไรต่อ
การตั้งค่า
- ติดตั้ง PaperZD จาก Fab หรือ GitHub แล้วเปิดใช้ในโปรเจกต์ของคุณ รีสตาร์ตเอดิเตอร์หาก Unreal ขอ
- ใน CoPilot เปิด การตั้งค่า > ส่วนขยาย แล้วเปิด PaperZD ซึ่งปิดไว้ตามค่าเริ่มต้น
- ขอให้ AI ตรวจสถานะของ PaperZD มันจะรายงานว่าพบ PaperZD หรือไม่ และหากไม่พบ จะบอกว่าขาดอะไร
สิ่งที่คุณขอได้
- “นี่คือ sprite sheet อัศวินของฉัน 6 คอลัมน์ 13 แถว สร้าง flipbook สำหรับ idle, walk และ attack ในสี่ทิศทาง แล้วตั้งค่า PaperZD ให้”
- “เพิ่ม state machine ที่มี Idle, Walk และ Attack ให้เข้า Walk เมื่อตัวละครกำลังเคลื่อนที่ กลับไป Idle เมื่อหยุด และให้ Attack เล่นหนึ่งครั้งแล้วกลับไป Idle”
- “ให้แอนิเมชันหันไปทางที่ตัวละครกำลังเคลื่อนที่”
- “สร้างตัวละครที่เล่นได้ ใช้ WASD เดิน และ Space โจมตี มีกล้องอยู่ด้านหลัง และมี game mode ที่สปอว์นมัน”
- “เพิ่มเสียงฝีเท้าให้แอนิเมชัน walk”
- “เปลี่ยนตัวละครเป็นชุดสีแดงระหว่างที่เกมกำลังรัน”
เบื้องหลังคำขอเหล่านั้น AI สามารถ:
- ตัด sprite sheet เป็นแอนิเมชัน การเรียกครั้งเดียวเปลี่ยน sheet เป็น sprite, flipbook, animation sequence, แหล่งแอนิเมชัน และ Animation Blueprint แอนิเมชันที่มีหลายทิศทางจะกลายเป็น sequence หลายทิศทางหนึ่งรายการ
- สร้างกราฟแอนิเมชัน โหนด play sequence, state machine, direction, override slot, select ตาม bool, ตัวเลข หรือ enum, random player และ cached animation แล้วเชื่อมต่อกัน
- สร้าง state machine state, conduit และ jump พร้อม transition ที่ทำงานตามตัวแปร เมื่อแอนิเมชันปัจจุบันจบ ทุกครั้ง หรือไม่เลย โดยมีลำดับความสำคัญ และ sequence ช่วงเปลี่ยนแบบเลือกได้
- เพิ่ม notify อีเวนต์กำหนดเอง เสียง และเอฟเฟกต์ Niagara หรือพาร์ติเคิลบนไทม์ไลน์ โดย notify แบบกำหนดเองจะกลายเป็นฟังก์ชันที่คุณเติมได้
- เพิ่มสกิน flipbook ทดแทนสำหรับแต่ละแอนิเมชัน สำหรับชุดแต่งตัวหรือการสลับพาเลต ใช้ได้ขณะเกมกำลังรัน
- สร้างตัวละคร ตัวละคร PaperZD ใหม่ที่ขับเคลื่อนด้วย Animation Blueprint หรือเชื่อมแอกเตอร์ที่มีอยู่เข้าไป และยังเพิ่มแทร็ก PaperZD ให้ Level Sequence ได้ด้วย
- ตรวจตอนเล่น อ่านว่า sequence ไหนกำลังเล่น เล่นไปถึงไหนแล้ว และค่าของตัวแปรแอนิเมชัน รวมถึงเล่น หยุด หรือกระโดดไปที่แอนิเมชันเพื่อทดสอบ transition ด้วยมือ
ข้อผิดพลาดที่มันหลีกเลี่ยง
PaperZD มีกับดักอยู่ไม่กี่อย่างที่คอมไพล์ผ่านแต่ไม่ทำงาน AI รู้จักมันดี:
- กฎของ transition ใหม่คือ “ไม่เลย” จนกว่าจะตั้งค่า ตัวละครจึงไม่มีวันออกจาก Idle
- ตัวแปรที่กฎอ่านต้องถูกเขียนที่ไหนสักแห่ง โดยทั่วไปคือ tick ของ Animation Blueprint การคอมไพล์ที่สะอาดไม่ได้พิสูจน์ว่ากฎเปลี่ยนค่าจริง AI จึงตรวจตอนเล่น
- sequence เล่นได้เฉพาะใน Animation Blueprint ของแหล่งแอนิเมชันของมันเอง มันจึงเก็บแอสเซ็ตของตัวละครแต่ละตัวไว้ด้วยกัน
- state และ transition ถูกคอมไพล์เป็นชุดเดียว หลังจบกลุ่มการแก้ไข ไม่ใช่หลังทุกการแก้ไข
- กริดของ sprite sheet อ่านจากซ้ายไปขวา เริ่มจากด้านบน AI จึงนับช่องแบบเดียวกับที่ PaperZD นับ
เคล็ดลับและเทคนิค
ทั้งหมดนี้มาจากการสร้างหมู่บ้านเล็กๆ ที่เล่นได้ด้วย PaperZD และ CoPilot: ฮีโร่ ชาวบ้าน ศัตรูโครงกระดูก และหมาป่าที่เดินเตร็ดเตร่ ทดสอบกับ PaperZD 2.2.4 บน Unreal Engine 5.7
สามข้อที่สำคัญที่สุด:
- บอก AI เลย์เอาต์แถวจริงของ sheet คุณ นับแถวตั้งแต่ 0 บอกว่าแถวไหนเป็นแอนิเมชันและแถวไหนเป็นอย่างอื่น และเปิดเฟรมแรกของแต่ละ flipbook เพื่อตรวจ
- อย่าหมุนแอกเตอร์เด็ดขาด flipbook เป็นการ์ดแบน ทิศทางจึงต้องมาจากแอนิเมชันที่เล่น ไม่ใช่จากการหมุนแอกเตอร์
- อย่าเชื่อการคอมไพล์ที่สะอาด ขอให้ทำเพลย์เทสต์ที่รายงานแอนิเมชันปัจจุบันและตัวแปรของมัน
อธิบาย sheet ให้ตรงตามจริง
AI มองไม่เห็นว่าแถวไหนของ sheet คุณเป็นแอนิเมชันอะไร คุณต้องบอกมัน
- sheet ที่ส่งออกจาก PixelLab มี 6 คอลัมน์และ 13 แถว ช่องละ 92 พิกเซล โดยทุกแอนิเมชันมีสี่ทิศทางเรียงตามลำดับ ใต้ ตะวันตก ตะวันออก เหนือ แถว 0 เป็นแถวท่าหมุน ไม่ใช่แอนิเมชัน
- ไฟล์ที่ส่งออกมาพร้อมไฟล์เลย์เอาต์ที่ระบุว่าแถวไหนเป็นแอนิเมชันอะไร ให้ใช้มัน ลำดับต่างกันไปในแต่ละตัวละคร: ในหมู่บ้าน ฮีโร่กับเมจเริ่มด้วย walk โครงกระดูกเริ่มด้วย attack และหมาป่าเริ่มด้วย idle
- นับจาก 0 และระบุแถวท่าหมุน ในหนึ่งเซสชัน พรอมต์เขียนว่า “แถว 1 ถึง 4 คือ walk” AI นับจาก 1 ทุกแอนิเมชันจึงเลื่อนไปหนึ่งแถว และฮีโร่หันผิดทาง
เขียนแถวแบบนี้:
แต่ละ sheet มี 6 คอลัมน์ 13 แถว ช่องละ 92 พิกเซล นับแถวจาก 0 แถว 0 คือแถวท่าหมุน ข้ามไป แถว 1 ถึง 4 คือ walk (ใต้ ตะวันตก ตะวันออก เหนือ 6 เฟรม) แถว 5 ถึง 8 คือ attack แถว 9 ถึง 12 คือ idle (4 เฟรม)
การตั้งค่าที่สำคัญ
- เปิด Pixel art เท็กซ์เจอร์ใช้ nearest filtering และไม่มี mip พิกเซลจึงคมชัด
- จุดหมุนอยู่ที่กึ่งกลางด้านล่าง เท้าอยู่ที่เดิมในทุกเฟรม
- เฟรมต่อวินาที บอกความเร็วที่คุณต้องการ AI เคยใช้ 15 กับทุกอย่าง ทำให้ idle 4 เฟรมวนซ้ำในเวลาราวหนึ่งในสี่วินาที idle 6, walk 12 และ attack 14 ดูถูกต้อง
- ลำดับทิศทาง sequence หลายทิศทางไล่ตามเข็มนาฬิกาจากด้านบน: เหนือ ตะวันออก ใต้ ตะวันตก
- ค่าบนแอกเตอร์ที่วางไว้ชนะ ค่า cooldown หรือความเร็วที่ตั้งบนแอกเตอร์ในเลเวลมีผลเหนือค่าเริ่มต้นของ Blueprint ดังนั้นให้ตรวจสำเนาที่วางไว้เมื่อการเปลี่ยนแปลงดูเหมือนไม่ทำอะไร
ให้สไปรต์หันเข้าหากล้อง
นี่คือการตั้งค่าที่ทำให้สไปรต์ไม่หมุน ไม่เอียง และไม่กลายเป็นเส้นบาง:
- ปิดการหมุนของแอกเตอร์ ปิด controller yaw, ปิด orient rotation to movement, ปิด controller desired rotation หากเปิดทิ้งไว้ การ์ดจะหมุนตามแอกเตอร์และอาจกลายเป็นเส้นบาง
- สปอว์นด้วย yaw 0 yaw 180 ตอนสปอว์นทำให้การ์ดเอนออกจากกล้องที่ตรึงอยู่กับโลก
- ตรึง spring arm กับโลก ปิด pawn control rotation, ปิด inherit pitch, yaw และ roll, ปิด collision test ใช้ pitch -40 และ yaw -90 ได้ผล
- เอียงการ์ดครั้งเดียว เมื่อกล้องมองลง 40 องศา ให้สไปรต์มี roll -40 และยกขึ้นให้เท้าแตะพื้น
- เคลื่อนที่ตามแกนโลก ไม่ใช่ตามเวกเตอร์ forward หรือ right ของแอกเตอร์
- แสดงทิศทางด้วย Set Directionality ป้อนตัวแปร Vector2D ชื่อ Facing เขียน Facing ทุก tick จากความเร็ว และคงค่าล่าสุดไว้เมื่อตัวละครหยุด
ด้วยกล้องนี้ ปุ่มจะแมปแบบนี้:
- D เคลื่อนไปตาม +X, Facing (1, 0)
- W เคลื่อนไปตาม -Y, Facing (0, 1)
- A เคลื่อนไปตาม -X, Facing (-1, 0)
- S เคลื่อนไปตาม +Y, Facing (0, -1)
หากซ้ายกับขวาหรือบนกับล่างสลับกัน ให้กลับเครื่องหมายของส่วนนั้นของ Facing อย่าหมุนแอกเตอร์เพื่อชดเชย
ทดสอบตอนเล่น
- transition ไม่ทำอะไรจนกว่ากฎของมันจะเปลี่ยนค่าได้ กฎใหม่คือ “ไม่เลย” และกฎที่อ่านตัวแปรต้องมีบางอย่างเขียนตัวแปรนั้น โดยทั่วไปคือ tick ของ Animation Blueprint ขอให้ทำเพลย์เทสต์ที่รายงานแอนิเมชันปัจจุบัน
- ให้ Facing มีค่าเริ่มต้น มันถูกเขียนเฉพาะตอนตัวละครเคลื่อนที่ การโจมตีก่อนก้าวแรกจึงอ่านได้ศูนย์ ค่าเริ่มต้นเป็นทิศใต้แก้ได้
- ให้ฮีโร่หันเข้าหาเป้าหมาย หากการโจมตีควรโดนบางอย่างทางด้านข้าง ให้ขอ AI ตั้ง Facing ไปทางศัตรูที่ใกล้ที่สุดก่อนฟัน
เซสชันจริง
คลิปคอลแล็บสร้างด้วยพรอมต์สี่ครั้งในแชทของ CoPilot ด้วยเอเจนต์ Claude Code AI รันเพลย์เทสต์เองและซ่อมสิ่งที่พบ เวลาที่ให้มาเป็นของเครื่องเดียว
- นำเข้าตัวละครสองตัวพร้อม state machine ของ idle, walk และ attack: ราว 2.5 นาที
- ฮีโร่ที่เล่นได้ (WASD เดิน Space โจมตี) กล้อง spring arm, game mode และชาวบ้านที่เดินระหว่างสามจุด: ราว 7 นาที
- ศัตรูโครงกระดูกที่ไล่และโจมตี พลังชีวิต และตัวนับพลังชีวิตบนหน้าจอ: ราว 7 นาที
- หมาป่าที่เดินเตร็ดเตร่ สมุนไพรที่เก็บได้ และตัวนับสมุนไพร: ราว 7 นาที
หน้าตาเป็นอีกงานหนึ่ง
AI สร้างแอนิเมชันและเกมเพลย์ หน้าตาของคลิปถูกตั้งค่าในเลเวล ไม่ใช่โดย AI:
- แสงอาทิตย์และแสงตะเกียงที่อบอุ่น
- Bloom, vignette และ depth of field ตื้นเพื่อให้ได้ความรู้สึกแบบ tilt-shift
- วัสดุ emissive แบบ unlit บนตัวละคร
เริ่มด้วยวัสดุ unlit และ exposure คงที่ การปรับ exposure ด้วยสายตาหลายรอบเสียเวลามากกว่าที่ได้คืน
ข้อจำกัด
- AI ไม่รู้ว่าแต่ละแถวของ sheet คุณเป็นแอนิเมชันอะไร คุณต้องบอกมัน
- ศัตรูเดินตรงเข้าหาฮีโร่ โดยไม่มี pathfinding เลี่ยงของประกอบฉาก
- ที่มุม 45 องศาพอดี สองแกนเท่ากันและแอนิเมชันเลือกตะวันออก
- พลังชีวิตหยุดที่ 0 ไม่มีอะไรเกิดขึ้นอีกจนกว่าคุณจะขอให้มีการตาย
- มันอ่านสถานะแอนิเมชันระหว่างที่กดปุ่มค้างไว้ไม่ได้ และบอกตรงๆ แทนที่จะเดา
สิทธิ์
การอ่านทำได้อิสระ การตรวจดูแอสเซ็ต กราฟ หรือแอนิเมชันที่กำลังรันจะไม่ถามเลย การเปลี่ยนแปลงเป็นไปตามการตั้งค่า Ask Before Edit หรือ Auto Edit ของคุณ เหมือนเครื่องมืออื่นทุกตัว
การทำงานของมัน
- ปลั๊กอินไม่ได้ผูกกัน ส่วนขยายเข้าถึง PaperZD ผ่าน reflection เท่านั้น Ultimate Engine CoPilot จึง build และรันเหมือนเดิมไม่ว่าจะติดตั้ง PaperZD หรือไม่ และส่วนขยายก็ทำงานต่อได้ข้ามเวอร์ชันของ PaperZD ที่มีการออกแบบเดียวกัน หากการอัปเดตเปลี่ยนชื่อบางอย่าง เครื่องมือจะบอกชื่อฟิลด์ที่หายไปแทนการเดา
- ใช้ได้ทุกที่พร้อมกัน เครื่องมือทำงานในแชทของ CoPilot ในไคลเอนต์ MCP ภายนอกอย่าง Claude Code และ Cursor และใน coding agent ดู การเชื่อมต่อ MCP
- 39 เครื่องมือ เครื่องมือสำหรับการสร้าง การตรวจดู และตอนเล่น ครอบคลุมแหล่งแอนิเมชัน sequence, notify, สกิน, Animation Blueprint, กราฟ, state machine, ตัวละคร และ Sequencer
ดู ส่วนขยาย สำหรับวิธีการทำงานของส่วนขยาย และ เพลย์เทสต์ สำหรับวิธีที่ AI ตรวจเกมที่กำลังรัน