공부/Unreal Engine 4

에셋의 이동 및 수정

Lero God 2023. 5. 9. 03:00

에셋의 이름을 바꾸고 경로를 바꾸는 행동은 에디터의 컨텐츠 브라우저 내에서 해야한다. 컨텐츠 브라우저 외에서, 예를 들어 윈도우 파일 탐색기 상에서 에셋을 옮기는(사실은 package 를 옮기는 것이다) 행동은 에셋에 대한 참조 관계를 고려하지 않기 때문에 옮겨진 경로나 이름으로 참조 관계가 업데이트 되지 않는다.

 

컨텐츠 브라우저에서 에셋의 이름을 바꾸거나 옮기는 경우는 참조 관계가 맞게 업데이트 됩니다.

만약 컨텐츠 브라우저에서 에셋을 다른 경로로 옮긴 경우, 기존 에셋 위치에는 리디렉터가 남게 됩니다.

∴리디렉터란?
에셋을 이동하거나 이름을 바꾸면 원래의 장소에 리디렉터라는 것이 남는다. 이 리디렉터는 새로운 에셋의 경로를 가지고 있다. 이 리디렉터를 이용해 에셋을 참조하고 있던 에셋들이 새로운 에셋 경로를 알 수가 있다.

컨텐츠 브라우저를 우클릭 후 '리디렉터 고치기' 를 누르면 리디렉터는 삭제되고 리디렉터를 레퍼런스 했던 에셋들은 새로운 위치의 에셋을 레퍼런스 하도록 업데이트 됩니다. 경로를 변경한 에셋과 업데이트된 에셋들은 다시 저장해야 합니다.

에셋을 참조(레퍼런스)를 할 때는 참조하는 에셋의 경로를 (TSoftObjectPtr에?) 저장해둔다.

 

주의사항

에셋을 새로 만들고, 이름을 변경한 후에, 변경 전의 이름으로 새로운 에셋을 만들면 오류가 발생한다. 이름을 변경 후에는 리디렉터가 생성되는데, 리디렉터와 에셋의 이름은 겹칠 수 없기 때문이다.(그러면 리디렉터 이름이 기존 이름이랑 같고 새로운 경로를 가르키고 있는 것인가?)

 

또 허상 리디렉터 문제가 있다.

  • 시나리오 1
    • 오브젝트 이름을 A 에서 B 로 바꿈
    • B를 삭제한다
    • B를 아직 가르키고 있는 리디렉터 때문에 삭제 할 수 없다는 오류 메시지가 뜬다.
  • 시나리오 2
    • 오브젝트 이름을 A 에서 B 로 바꿈
    • 오브젝트 이름을 B 에서 A 로 다시 바꿈
    • A 를 삭제
    • 처음 이름 변경했을 때 생성된 리디렉터는 파괴되지만, 그 다음 이름 변경 후 B에 생성된 리디렉터는 남아있어서 A 는 참조되고 있다. 그 결과 A를 지우려고 할 때 오류가 난다.

 

이 허상 리디렉터 문제를 해결하기 위해서는 에디터에서 리디렉터 고치기를 통해서나 SavePackages 를 통해 리디렉터를 고친 뒤에(삭제 후에)  에셋을 삭제해야 한다.