UndoPro는 Unity의 기본 시스템에 통합 된 명령 기반 UNDO 시스템입니다. 이를 통해 DEVS는 사용자를 새로운 Undo-Workflow로 강요하지 않고 실행 취소/레디 작업에 동작을 사용할 수 있습니다!
포럼 스레드
도구를 사용하지 않거나 도구를 배포하는 방법에 따라 몇 가지 옵션이 있습니다.
Unity는 실행 취소 시스템에 대한 매우 제한된 정보 만 제공합니다.
내부적으로 Undopro는 명령 기반 레코드를 추가하기위한 API가 호출 될 때 기본 시스템에서 더미 레코드를 만듭니다. 그런 다음 사용 가능한 콜백을 사용하여 추적되며 명령은 각각 다시 실행 취소 또는 다른 방식으로 전환 할 때 실행됩니다. 큰 가혹한 것은 기본 실행 취소 시스템의 동작이었습니다. 거의 예측할 수 없습니다! 레코드는 취소/재정이 사라지거나 사라질 때 특정 조건에서 복제 할 수 있습니다. 매우 어렵지만 견고한 추적 알고리즘을 만들기위한 요구 사항입니다. 분명히 새로운 기록의 추가도 감지해야합니다.
추적이 완료되면 실행 취소 및 레디 스택 모두에 대한 시프트 값이 별도로 계산됩니다 (기억이 사라지거나 복제 할 수 있습니다!). 그런 다음 내부 레코드가 그에 따라 업데이트되고 실행 취소/redo 레코드가 요약됩니다.
이 모든 방법으로, 추가 콜백은 OnundOperformed/OnRedOperFormed/OnAdDundoreCord가 호출됩니다.
작업, 심지어 익명의 행동이 더 나쁜 경우 직렬화는 또한 큰 문제입니다. Undopro는 현재 장면에서 숨겨진 임시 GameObject를 유지하여 직렬화 해야하는 모든 사용자 정의 레코드를 보유합니다. 직렬화는 동작, 객체, 방법 등에 대한 모든 조합을 지능적으로 처리하는 몇 가지 래퍼 클래스에 의해 달성됩니다.
이 시스템은 일반적으로 사용할 수도 있습니다! ->는 모든 직렬화 가능한 객체 (UnityEngine.object 및 System.Object) 및 비 시리얼링 가능한 객체의 부분적으로 부분적으로 (하나의 계층 직렬화 가능한 멤버 직렬화)를 지원하면 다른 모든 객체는 기본적으로 기본적으로 제공됩니다 -> 대부분의 익명 조치 (아직 찾을 수 없음). 컨텍스트를 완전히 사용하고 거의 모든 로컬 변수를 참조 할 수 있습니다 (위의 요약 된 조건이 적용됨)!
이 시스템은 신뢰할 수있는 것처럼 보이지만 완전히 방탄이라고 주장하지는 않습니다! 추적을 망칠 때 발생할 수있는 최악의 경우는 레코드가 소량으로 상쇄된다는 것입니다 (동작은/이전에 한두 가지 레코드가 실행됩니다). 운 좋게도 그러한 상황은 없지만 실패에 대해 책임을지지 않습니다! 당신이 그것을 깨뜨릴 수 있다면 그것에 대해 알려 주시고 (문제를 통해) 당신이 한 일에 대한 정보를 제공하고 나는 이것을 고치려고 노력합니다 :)
프로젝트 어딘가에 Undopro 폴더를 넣으면 좋습니다. 편집기 폴더에있을 필요는 없지만 런타임에 사용할 수 있다는 의미는 아닙니다! 편집기 API가 필요한 기능은 전처리 검사에 의해 런타임에 제외됩니다. 반면에 편집기 폴더에서는 1의 기능을 테스트하는 데 유용한 두 개의 유용한 창을 찾으십시오. 실행 취소 시스템 자체 및 2. 작업 직렬화 시스템. 이 Windows와 함께 시스템을 쉽게 디버깅하여 UndoPranger에서 #Define undo_debug를 사용하여 작동하는 방법을 확인할 수 있습니다! 자신의 프로젝트에 동작 직렬화 시스템을 사용하려면 폴더를 폴더 Undopro/SerializableAction을 복사하여 라이센스와 함께 복사하십시오!
개발자를위한 API는 매우 간단합니다. Undopro 종속성을 추가 한 다음 UndoPranager를 사용하여 시스템과 상호 작용하십시오. 중요한 요소 :
권장 사항 : 중간 결과로 무언가를 계산하거나 작업을 수행 한 경우 결과가 직렬화 가능한 경우이를 설정하는 것이 매우 쉽습니다. 실행 취소/레디 액션에서 재 계산하는 대신, 실행 취소 작업과 새로운 결과에서 이전 직렬화 가능한 결과를 설정합니다. 완료!
이 연장은 Seneral에 의해 작성되었으며 MIT 라이센스에 따라 게시됩니다 (License.md에 추가로 지정됨)