Unity 핫 업데이트 등반 구덩이(2)

저번에 핫업데이트 쓴지 2년 넘었네요 마지막으로 핫업데이트에서 발생한 몇가지 문제를 기록하기 위해 ILRuntime을 마지막으로 사용했습니다. 깊이 작업.
이 기록은 다양한 플랫폼에서 Lua를 사용하여 업데이트할 때 발생할 수 있는 몇 가지 질문을 모은 것입니다. 의.

이 기사는 계속 업데이트되고 수정되며 함정을 밟은 경우 나에게 메시지를 남기고 더 많은 사람들에게 알릴 수 있습니다.

1. www를 사용하여 로드된 텍스트가 왜곡됨 알려진 형식이 UTF-8인 경우 다음과 같은
방법 으로 전송할 수 있습니다 . 이전 www: byte[] 결과 = www.bytes;



string jsondata = System.Text.Encoding.UTF8.GetString(results, 3, results.Length - 3);

2. StreamingAsset 디렉터리에 쓸 수 없는 파일
AB 패키지는 StreamingAsset 디렉터리에 저장해야 하며 패키지에 입력할 수 있지만 쓸 수는 없습니다. 따라서 읽고 쓰기 위해서는 Application.persistentDataPath 주소에 복사해야 합니다.

3. StreamingAsset 디렉토리의 모든 파일을 읽을 수 없습니다.
PC에서 파일을 읽고 생성하고 XML 또는 json의 디렉토리 및 파일에 액세스하는 것을 고려할 수 있습니다.

4. 지정된 디렉토리의 모든 파일 가져오기
DirectoryInfo dirInfo = new DirectoryInfo(path);
FileInfo[] files = dirInfo.GetFiles("*", SearchOption.AllDirectories);
Android는 StreamingAsset 아래의 디렉토리를 읽을 수 없습니다.

5. 디렉토리 차이 읽기 및 쓰기 문제
StreamingAsset이 파일 읽기:
Android는 StreamingAsset: Application.streamingAssetsPath + "/filename.txt" 읽기,
IOS는 StreamingAsse: "file://" + Application.streamingAssetsPath+ "/filename.txt" 읽기 ;(여기에 막대 두 개가 있음)
PC는 StreamingAsse를 읽습니다. Application.streamingAssetsPath+"/filename.txt";

PersistentDataPath는 파일 읽기 및 쓰기:
PC는 PersistentDataPath를 직접 읽고 쓸 수 있음: Application.persistentDataPath+ "/filename.txt"
Android 쓰기: Application.persistentDataPath
Android 읽기: "file:///"+Application.persistentDataPath+ "/file Name.txt"
IOS 쓰기: Application.persistentDataPath + "/filename.txt"
IOS 읽기: "file://" + Application.persistentDataPath + "/filename.txt"

메서드 차이점 예: Android 플랫폼에서 AssetBundle.LoadFromFile 메서드의 읽기 메서드는 다음과 같습니다.
Application.persistentDataPath+ "/filename.txt"
IOS 및 OSX는 "file://"을 쓸 필요가 없습니다.

각 플랫폼의 디렉토리는 다르며 경로 스플라이싱은 각 경로의 의미를 이해해야 합니다.예를 들어 모바일 측에서:
application.datepath + "streamingAsset"은 application.streamingAsset과 같지 않습니다.

6. 핫 업데이트된 MD5는 무엇입니까
파일 바이트를 문자열로 변환하고 MD5로 암호화하여 코드 문자열을 가져오고 파일이 변경되었는지 여부를 비교하는 데 사용됩니다.

7. 접미사로 파일을 필터링하는 방법
!files[i].Name.EndsWith(“.meta”) 방법을 사용할 수 있습니다.

8. 경로
Object o = AssetDatabase.LoadAssetAtPath(경로)를 통해 필요한 개체를 가져오는 방법
경로 내용: 프로젝트 루트 디렉토리 자산 시작, 다음 방법을 사용하여 전체 경로로 자르기
int strStart = FullName.IndexOf("자산"),
int strLength = FullName.Length - strStart,
문자열 경로 = FullName.Substring(strStart, strLength);

9. 종속성 문제
관리는 AssetBundlesBrowser 플러그인을 사용하는 것이 가장 편리함 BuildPipeline.BuildAssetBundles를 사용하여 여러 파일을 하나의 패키지로 묶고 종속성은 기본 패키지에 존재합니다.
그리고 BuildPipeline.BuildAssetBundle을 사용하여 하나씩 AB 패키지로 패키징하기로 했습니다.

10. AB 패키지 프로세스를 직접 작성하거나 플러그인 프로세스를 사용하십시오.
개인적으로 여러 위대한 신들의 의견을 참조하고 직접 작성하는 것이 더 낫다고 생각합니다.
그 이유는 각 프로젝트의 요구 사항이 다르고 기계의 작업 부하를 최대한 줄일 수 있기 때문입니다.
패키징 프로세스 후 버전, 리소스 목록 및 MD5 파일 생성, 파일 비교 수정 및 AB 패키지 암호화의 전체 프로세스를 가장 간결한 방식으로 구현할 수 있습니다.

11. AB 패키지를 암호화하는 방법
파일의 본질은 바이트이며 바이트 문자열을 셔플하여 암호화할 수 있습니다.
AB 패키지 이름은 파일 이름 + MD5를 사용합니다.

12. Android는 StreamingAsset 폴더 아래의 파일을 동기식으로 읽습니다
많은 정보를 확인하고 읽은 후 Andriod는 www를 통해서만 비동기식으로 읽을 수 있으며 IOS는 동기식으로 읽을 수 있습니다.
또는 패키징을 위해 프로젝트를 Android로 내보내고 StreamingAsset을 자산 디렉터리에 넣어야 합니다.
참조: https://www.xuanyusong.com/archives/4033
또는 persistDataPath에 복사한 후 AssetBundle.LoadFromFile(PathURL)을 사용하여 읽으십시오.

13. Android는 StreamingAsset 폴더에서 AB 패키지 파일을 동기식으로 읽습니다.
1. Android에서 application.streamingAssetPath의 반환은 jar:file://로 시작하며 정상적으로 사용하려면 제거해야 하므로 공개
정적 문자열이 필요합니다. path =
#if UNITY_ANDROID
Application.datePath+“!assets”;
#else
Application.streamingAssetsPath;
#endif
AssetBundle.LoadFromFile(path+“/”+“filename”)

14. 핫 업데이트 리소스 저장 방법
1. 로컬 IIS 사용(자세한 내용은 Unity 핫 업데이트 크롤링 노트 참조)
2. 백엔드 동급생에게 주소 공간 제공 요청
3. 학습용 도메인 이름 주소 구매, 총 수십 개 달러 돈입니다.

15. AssetBundle.LoadFromFile은
AB 패키지를 비압축 또는 LZ4 압축 형식으로 로컬에서 로드하기 위한 효율적인 API입니다.

16. 각 플랫폼의 파일 존재 여부 판단
이것은 모두 사용되며, 존재하지 않으면 존재하지 않습니다. File.Exists(경로 URL)

17.
Mac과 IOS는 Apple 시스템을 모르기 때문에 같은 것이라고 생각합니다.Mac은 대상 플랫폼 StandaloneOSX를 선택해야 하고 IOS는 AB 패키지를 포장할 때 IOS를 선택해야 합니다.경로에서도 필요합니다. OSXEditor와 OSXPlayer가 다른 경로를 사용한다고 판단합니다.

18. 왜 lua 파일을 AB 패키지로 패키징할 수 없습니까
?패키징하려면 마침표 접미사를 .bytes 파일로 변경해야 합니다.

Supongo que te gusta

Origin blog.csdn.net/ww1351646544/article/details/119026508
Recomendado
Clasificación