UNDOPRO เป็นระบบ UNDO ตามคำสั่งที่รวมอยู่ในระบบเริ่มต้นของ Unity สิ่งนี้ช่วยให้ devs ใช้การกระทำสำหรับการดำเนินการยกเลิก/ทำซ้ำโดยไม่ต้องบังคับให้ผู้ใช้เข้าสู่การเลิกทำงานใหม่!
เธรดฟอรัม
ขึ้นอยู่กับว่าคุณต้องการใช้เครื่องมือหรือแจกจ่ายเครื่องมือของคุณอย่างไรคุณมีตัวเลือกมากมาย
Unity ให้ข้อมูลที่ จำกัด มากเกี่ยวกับระบบการเลิกทำ:
ภายใน UNDOPRO จะสร้างระเบียนจำลองในระบบเริ่มต้นเมื่อ API สำหรับการเพิ่มระเบียนตามคำสั่งถูกเรียก สิ่งนี้จะถูกติดตามโดยใช้การโทรกลับที่มีอยู่และคำสั่งจะถูกดำเนินการเมื่อพวกเขาเปลี่ยนจากการทำซ้ำสแต็กหรือวิธีอื่น ๆ ตามลำดับ Hurden ที่ยิ่งใหญ่คือพฤติกรรมของระบบการเลิกทำเริ่มต้น: มันเกือบจะคาดเดาไม่ได้! บันทึกอาจทำซ้ำในเงื่อนไขบางอย่างเมื่อยกเลิก/redone หรือหายไป มันยากมาก แต่ข้อกำหนดในการสร้างอัลกอริทึมการติดตามที่มั่นคง เห็นได้ชัดว่าการเพิ่มบันทึกใหม่จะต้องตรวจพบ
เมื่อทำการติดตามค่าการเปลี่ยนแปลงสำหรับการเลิกทำและทำซ้ำสแต็กแยกต่างหากจะถูกคำนวณ (จำไว้ว่าบันทึกอาจหายไปหรือซ้ำในระหว่างการเลิกทำ/ทำซ้ำ!) บันทึกภายในจะได้รับการอัปเดตตามนั้นและบันทึกเพื่อยกเลิก/ทำซ้ำจะถูกระบุไว้
ในทางของทั้งหมดนี้การเรียกกลับเพิ่มเติม onundoperformed/onredoperformed/onaddundonecord เรียกว่า
การทำให้เป็นอนุกรมยังเป็นปัญหาใหญ่เช่นการกระทำและการกระทำที่ไม่ระบุชื่อที่แย่กว่านั้นยากที่จะทำให้เป็นอนุกรม Undropro รักษา gameObject ชั่วคราวที่ซ่อนอยู่ในฉากปัจจุบันซึ่งเก็บบันทึกที่กำหนดเองทั้งหมดที่จำเป็นต้องได้รับการต่อเนื่อง การทำให้เป็นอนุกรมทำได้โดยคลาส wrapper สองสามอันที่จัดการทุกชุดค่าผสมสำหรับการกระทำวัตถุวิธีการ ฯลฯ อย่างชาญฉลาด
ระบบนี้สามารถใช้งานได้โดยทั่วไป! -> รองรับวัตถุที่เป็นอนุกรมทั้งหมด (ของทั้ง UnityEngine.Object และ System.Object) และวัตถุที่ไม่สามารถรักษาได้บางส่วน (การทำให้เป็นอนุกรมสมาชิกแบบอนุกรมหนึ่งชั้น), วัตถุอื่น ๆ ทั้งหมดได้รับการผิดนัด -> รองรับการกระทำที่ไม่ระบุตัวตนส่วนใหญ่ คุณสามารถใช้บริบทและการอ้างอิงได้อย่างเต็มที่เกือบทั้งหมดตัวแปรท้องถิ่น (เงื่อนไขที่ระบุไว้ข้างต้นใช้)!
ระบบนี้ดูเชื่อถือได้ แต่ฉันไม่ได้อ้างว่ามันพิสูจน์ได้อย่างสมบูรณ์! กรณีที่เลวร้ายที่สุดที่สามารถเกิดขึ้นได้เมื่อมันยุ่งกับการติดตามแม้ว่าบันทึกของคุณจะถูกชดเชยด้วยจำนวนเล็กน้อย (การกระทำจะดำเนินการหนึ่งหรือสองระเบียนหลังจาก/ก่อน) ขณะนี้ยังไม่มีสถานการณ์ดังกล่าวโชคดี แต่ฉันไม่รับผิดชอบต่อความล้มเหลวใด ๆ ! หากคุณจัดการที่จะทำลายมันโปรดแจ้งให้ฉันทราบเกี่ยวกับเรื่องนี้และให้ข้อมูลเกี่ยวกับสิ่งที่คุณทำ (ผ่านปัญหา) และฉันพยายามแก้ไขปัญหานี้ :)
เพียงแค่ใส่โฟลเดอร์ undopro ที่ไหนสักแห่งในโครงการของคุณและคุณก็พร้อมที่จะไป! แม้ว่ามันจะไม่จำเป็นต้องอยู่ในโฟลเดอร์ Editor แต่ก็ไม่ได้หมายความว่าคุณสามารถใช้งานได้ที่รันไทม์! ฟังก์ชันการทำงานที่ต้องการ API ตัวแก้ไขจะถูกแยกออกจากเวลาทำงานโดยตรวจสอบตัวประมวลผลล่วงหน้า ในโฟลเดอร์ Editor ในอีกทางหนึ่งคุณจะพบหน้าต่างที่มีประโยชน์สองหน้าต่างเพื่อทดสอบการทำงานของ 1 ระบบการเลิกทำเองและ 2 ระบบการดำเนินการแบบแอ็คชั่น นอกเหนือจากหน้าต่างเหล่านี้แล้วคุณสามารถดีบักระบบได้อย่างง่ายดายเพื่อดูว่ามันทำงานอย่างไรโดยการเขียนบทโดยไม่รู้สึกถึง #define undo_debug ใน Undopromanager! เพื่อที่จะใช้ระบบการดำเนินการแบบซีเรียลการกระทำสำหรับโครงการของคุณเองเพียงแค่คัดลอกโฟลเดอร์ undopro/serializableaction พร้อมกับใบอนุญาตแน่นอน!
API สำหรับนักพัฒนานั้นง่ายมาก เพิ่มการพึ่งพาอาศัยกันไม่ได้จากนั้นใช้ undopromanager เพื่อโต้ตอบกับระบบ องค์ประกอบสำคัญ:
คำแนะนำ: หากคุณคำนวณบางสิ่งบางอย่างหรือดำเนินการใด ๆ ด้วยผลลัพธ์ระดับกลางมันเป็นเรื่องง่ายมากที่จะตั้งค่าสิ่งนี้หากผลลัพธ์เป็นแบบอนุกรม แทนที่จะคำนวณใหม่ในการดำเนินการ undo/redo เพียงกำหนดผลลัพธ์ serializable ก่อนหน้านี้ในการดำเนินการเลิกทำและการดำเนินการใหม่ในการดำเนินการทำซ้ำ เสร็จแล้ว!
ส่วนขยายนี้ถูกสร้างขึ้นโดย Seneral และเผยแพร่ภายใต้ใบอนุญาต MIT (ระบุเพิ่มเติมใน License.md)