Unity의meta 파일에 쓴guid 정보

3865 단어 Unity

개요


이 기사는 유닛상guid의 구조와 구조를 활용한 팁스를 소개했다.
Tips 위주라 이 구조를 아는 사람이 Tips를 건너뛰는 것도 문제없다.

guid 소개


이번에 깊이 파고든 상세한 상황은 몰라도 되기 때문에 내용이 비교적 무분별하다. 주로 덮어쓰지 않은 32개의 문자열과 Unity가 Asseets 디렉터리에서 관리하는 Asseet 파일(장면 파일,Prefab, 스크립트, 디렉터리, 자원 등)을 모두 이guid로 나누었다.Inspector에서 다른 Plefab 등의 Asseet 파일을 참조할 때도 Asset 파일에는 guid만 표시됩니다.
그나저나 AssetDatabase.GUIDToAssetPath를 통해guid에서 파일 경로나 AsseDatabase를 얻을 수 있습니다.AssetPathToGUID는 파일 경로에서 guid를 생성할 수 있지만 guid에서 파일 경로를 생성할 때 사용하는 것은 아니며 중복되지 않으면 적당한 문자열이라도 문제가 없습니다.
  • 단, 직접 guid를 만들면 어디서 중복되는지 모르므로 유닛의 자동 생성을 의뢰하거나 유닛에 도구를 구축하는 것이 안전하다
  • 사전에 Asset 파일을 텍스트 형식으로 설정(메뉴의 Edit->Project Settings->Editor->Editor Settings의 Asset Serialization을 Force Text로 설정)
  • .meta 파일은


    Asset 파일과 쌍을 이루고 Asset 파일의 메타정보(사운드의 경우 kbps 등, 이미지의 경우 isReadable 로고 등)가 적힌 파일이며 guid도 이 파일에 적혀 있다.
    이 파일이 없을 때 초기 값을 쓴 상태에서 자동으로 생성되며 스크립트와Prefab일 때 메타데이터도guid 정도만 쓰이기 때문에 버전 관리를 할 때 주의해야 합니다.Meta 파일을 함께 추가하고 Asset 파일을 조작할 때 Unity의 프로젝트 창에서 조작합니다. 이런 규칙을 준수한다면 특별히 신경 쓸 필요가 없습니다.
    그러나 사운드와 이미지 등의 에셋 파일이라면 위에 적힌 것처럼 값을 설정하는 메타 정보도 적기 때문에 중요한 파일이 된다.
    또한 Asset 파일을 조작할 때 프로젝트 창에서 조작하는 것이 일반화되었다. 즉, 파일의 메타 정보이다.meta 파일에 기술되어 있으므로 Unity 관리 외부에서 파일을 조작할 경우메타 파일이 업데이트되지 않기 때문에 설정값이 고장난 경우입니다.
  • 예를 들어 자원 관리자rename의 경우.메타 파일을 다시 만들기 위해guid가 다시 생성되었기 때문에Inspector의Prefab 참조가 일치하지 않고 소리, 이미지의 설정값이 초기화됨
  • Tips


    이 기사의 주요 내용으로 guid가 어려움을 겪을 때 편리한 팁을 활용하는 것이다.

    참조를 통일적으로 변경하려는 Prefab


    대화 상자에서 Unix 명령을 사용하여 처리합니다.

    예를 들어 위 그림의 Sphere prefab는 테스트 필드에서 테스트 prefab를 참조한 상태에서 테스트참조를 copy prefab로 바꾸고 싶습니다.
    (ルートディレクトリがAssetsの場合)
    
    置換元のguid
    $ grep "guid" ./Prefabs/test.prefab.meta
    guid: 7674e048f0903d7439bcd629d143d6bb
    
    置換先のguid
    $ grep "guid" ./Prefabs/test_copy.prefab.meta
    guid: 51b5f5acbc1bc0f46bee74ffa692fa18
    
    全てのprefabの、全てのguidを置き換える
    $ find ./Prefabs -name "*.prefab" | xargs sed -i -e 's/guid: 7674e048f0903d7439bcd629d143d6bb/guid: 51b5f5acbc1bc0f46bee74ffa692fa18/g'
    
    シーンファイル内も置き換えるなら
    $ find ./Scenes -name "*.unity" | xargs sed ...
    

    필드 이름을 변경할 때 Inspector의 설정값 복원 초기화



    예를 들어 위 그림의 Sphere 스크립트에 있는 테스트를renamedTest로 이름을 바꾸려고 합니다.

    Sphere.cs 내의 필드 이름만 변경하면 Asset 파일에서 이전 필드 이름의 설정값이 유지되고 새 필드 이름의 설정값이 초기화됩니다.
    낡은 설정치가 그대로 있으면 사용되지 않고 다시 설정할 수밖에 없거나 변경 전과 통합해 부활시키는 것은 번거롭고 무섭고 기계적으로 처리하고 싶다.
    置換元スクリプトのguid
    $ grep "guid" ./Scripts/Sphere.cs.meta
    guid: cebfb56161901ff4d9f26830eac423ae
    
    スクリプトのフィールド名部分を抜き出してフィールド名置換
    $ find ./Prefabs -name "*.prefab" | xargs sed -i -e '/guid: cebfb56161901ff4d9f26830eac423ae/,/^---/{s/test:/renamedTest:/}'
    
    같은 이름의 스크립트 필드를 생략해야 하기 때문에 대상 스크립트의 필드 이름 부분을 지정하고 그 필드의 이름을 바꿉니다.
    파일의 키워드와 중복될 수 있지만 오류 로그가 중복되기 때문에 필드 이름만 바꾸면 됩니다.
  • 중복 오류 로그가 발생하더라도 구축은 통과됩니다. 엄밀히 말하면 키워드를 이용하여 값을 설정하지 않았습니다.test:.\{2,\}이렇게 설정값이 있는지 확인하는 것이 좋습니다.

  • 매우 편리하다

    못다 하다


    Tips를 Unity 명령으로 사용하는 것이 더 편리합니다.
    (이미 다른 방법으로 해결한 사람이 있을지도 모른다)

    좋은 웹페이지 즐겨찾기