세션과 되돌리기
이 문서를 읽으면 불러오기가 실제로 무엇을 바꾸는지, 되돌리기가 왜 작업 단위로 딱 떨어지는지, 표정 키 편집이 무엇이고 왜 메쉬 저장을 막는지, 그리고 스크립트 컴파일이나 Play에서 작업이 살아남는 이유를 알 수 있습니다.
Work Mesh
불러오기를 누르면 도구는 원본 메쉬를 복제해 임시 메쉬를 만들고, 렌더러의 메쉬 참조를 그 사본으로 바꿉니다. 이 사본이 Work Mesh입니다.
- 원본 에셋 파일은 열지도 쓰지도 않습니다.
- 모든 편집(브러시, 기즈모, 웨이트, 표정 키 구조 변경)은 Work Mesh 위에서 일어납니다.
- 세션이 끝나면(
편집 버리기, 세션 전환) 렌더러는 원본 참조로 돌아가고 Work Mesh는 버려집니다.
메쉬 저장만이 이 사본을 파일로 내보냅니다. → 메쉬 저장 내부
웰드 그룹
Unity 메쉬는 UV 심, 노멀 심, 재질 경계에서 같은 위치의 정점을 여러 개로 쪼개 둡니다. 화면에서는 점 하나로 보이지만 데이터에는 서너 개가 있습니다.
도구는 로컬 공간 위치가 같은 정점들을 하나의 웰드 그룹으로 묶어 다룹니다.
- 선택은 그룹 전체를 함께 잡습니다.
- 브러시와 기즈모 변형은 그룹 전체에 같은 값을 씁니다.
- 웨이트 페인트 결과도 그룹 전체에 똑같이 기록됩니다.
그래서 정점 하나만 옮겼는데 UV 심이 벌어지지 않는 결과가 나옵니다.
대칭도 같은 개념 위에 있습니다. 좌우 대응은 인덱스가 아니라 로컬 공간 기본 위치로 찾으므로, 좌우 정점 수가 정확히 같지 않아도 동작합니다.
되돌리기
Unity의 Ctrl+Z를 그대로 씁니다. 도구는 자체 되돌리기 스택을 따로 두지 않고 Unity의 것에 얹습니다.
의도 하나 = 되돌리기 한 단계가 규칙입니다.
| 작업 | 되돌리기 단위 |
|---|---|
| 브러시 스트로크 | 마우스를 누르고 뗄 때까지 전체가 한 단계 |
| 기즈모 변형 | 한 번의 드래그가 한 단계 |
G/R/S 모달 | 확정 한 번이 한 단계 |
| 웨이트 브러시 | 스트로크 하나가 한 단계 |
| 선택 본 스무딩 슬라이더 | 손을 뗄 때 한 단계로 확정 |
| 삭제, 분리, 병합, 키 구조 변경 | 작업 하나가 한 단계 |
| 칠한 영역 정리 | 적용 하나가 한 단계 |
| 다중 메쉬 일괄 작업 | 전체가 하나의 복합 단계 |
마스크 변경도 되돌리기 대상입니다. 반대로 숨기기는 아닙니다. 메쉬 데이터가 아니라 세션의 표시 상태이기 때문입니다.
구조 스냅샷
정점 수나 인덱스가 바뀌는 작업(삭제, 분리, 병합, 키 추가와 삭제)은 값 하나를 되돌려서는 복구할 수 없습니다. 이런 작업은 작업 전 메쉬 전체를 스냅샷으로 떠 두고, 되돌리기가 오면 그것을 복원합니다.
스냅샷은 메모리를 쓰므로 상한이 있습니다. 상한을 넘으면 오래된 기록부터 버리고 알려 줍니다.
표정 키 편집
표정 키의 새 키 조형과 기존 키 편집은 여러 단계에 걸친 작업이라, 중간 상태를 그대로 저장하면 안 됩니다. 그래서 시작과 끝이 명시적인 편집 단위로 감쌉니다. 이것을 트랜잭션이라고 부릅니다.
- 시작하면 창 배지가
키 편집 중이 되고, 씬뷰와 창에 고정 바가 뜹니다. Enter는 저장,Esc는 스트로크 취소입니다.Esc는 키 편집을 버리지 않습니다.- 편집이 열려 있는 동안에는
메쉬 저장과새 키로 저장이 막힙니다.
편집 중에도 모양 다듬기와 선택·이동 탭으로 옮겨 작업할 수 있습니다. 다만 정점 수가 바뀌는 작업은 키로 저장할 수 없습니다.
되돌리기가 편집을 무효로 만들 때
Ctrl+Z가 편집 시작 시점보다 앞으로 가면 편집의 기준이 사라집니다. 이때 도구는 조용히 진행하지 않고 편집을 취소합니다. 다시 실행도 같은 규칙입니다. 판정은 편집 시작 시점에 기록해 둔 값으로 하므로 결정적입니다.
이때 창에는 실행취소가 '{편집 이름}' 편집 시작 이전까지 되돌아가 편집 내용이 무효화되었어요. 안전을 위해 편집을 취소했어요.라는 안내가 나타납니다.
자동 보존과 복원
Unity는 스크립트를 저장하면 도메인을 다시 로드하고, 그때 에디터 창의 상태는 대부분 초기화됩니다. 편집 세션을 그냥 두면 저장하지 않은 작업이 경고 없이 사라집니다.
그래서 다음 시점에 편집 중인 Work Mesh를 Library/EmeAutoSave/에 보존합니다.
- 도메인 리로드 직전
- Play 모드 진입 직전
- 창을 닫을 때, 씬을 닫을 때
- Unity를 끝낼 때
보존된 편집은 같은 에디터 실행 안에서(도메인 리로드 포함) 또는 Unity가 정상 종료된 뒤 다음에 열 때 자동으로 복원됩니다. 정점, 표정 키, 웨이트, 저장하지 않은 상태까지 그대로 돌아옵니다. Play 중에는 원본 메쉬가 보입니다.
- 보존에 실패하면 Play 진입과 종료를 멈추고 이유를 상태줄에 알립니다.
- 저장한 적 없는 씬의 오브젝트는 보존할 수 없으므로, 씬을 먼저 저장하라는 안내가 나옵니다. 창의
씬 저장과편집 버리기버튼으로 바로 처리할 수 있습니다. - 창이 여러 개 열려 있으면 복원은 하나만 수행합니다.
- 복원하지 못한 파일은 지우지 않습니다.
복원하면 상태줄에 보존된 편집 {N}개를 복원했어요. 복원 전에 한 편집은 Ctrl+Z로 되돌릴 수 없어요.가 나타납니다.
크래시 대비
미저장 편집이 있고 내용이 바뀐 경우에만, 편집 사이에 체크포인트를 남깁니다. 체크포인트는 최소 60초 간격입니다. Unity가 비정상 종료하거나 강제로 끝나면 자동 복원되지 않고, 다음에 창을 열 때 창 위에 배너가 나옵니다.
복원: 체크포인트에서 세션을 되돌립니다.버리기: 5초 안에 두 번 눌러야 실행됩니다.
복원하지 못한 파일은 지우지 않습니다.
배너는 경우를 나눠 안내합니다. 편집을 만든 씬 파일을 찾을 수 없으면(삭제됐거나 아직 가져오는 중) 복구 파일을 그대로 두고 가져오기가 끝나면 다시 확인합니다. 대상 오브젝트가 지금 열린 씬에 없으면 복원할 수 없고 편집 N개 지우기만 할 수 있습니다. 이 버튼은 5초 안에 한 번 더 눌러야 실행되며 씬과 에셋은 바뀌지 않습니다.
Play 중에는 시작 카드가 편집이 보존되어 있어요를 보여 주고, 편집은 Play를 끝내면 돌아옵니다. Play 중에는 불러오기를 쓸 수 없습니다.
세션이 끝나는 방법
| 방법 | 결과 |
|---|---|
메쉬 저장 | 에셋으로 저장하고 끝냅니다 |
편집 버리기 | 원본으로 되돌리고 끝냅니다. 확인을 거칩니다 |
| 다른 대상으로 전환 | 저장하지 않은 편집이 있으면 안내만 하고 전환을 막습니다 |
Tab은 여기에 없습니다. 편집 입력만 끄고 세션은 살아 있습니다.
세션 도중에 렌더러나 메쉬가 씬에서 사라지면 그 세션만 조용히 정리되고, 나머지는 유지됩니다.