이 첫 번째 기술 블로그는 주로 내 자신의 기억과 이해를 위한 것이며, 이를 보는 친구들의 몇 가지 질문에 답할 수도 있기를 바랍니다.
플래그를 설정하고 새로운 지식 포인트를 배우거나 이해할 때마다 향후 검토 및 개선을 촉진하고 기술을 공유하는 방법으로 가능한 한 블로그를 작성하십시오.
블로거는 아직 초보입니다~~
구분선
먼저 핫업데이트(Hot Update)가 무엇인지 간략하게 설명드리겠습니다.
핫 업데이트의 개념은 게임이나 소프트웨어를 업데이트해야 할 때 새 클라이언트를 다시 다운로드할 필요 없이, 대신 다운로드한 리소스와 코드 파일이 실행되는 동안 내부적으로 업데이트된다는 것입니다.
핫 업데이트의 이점은 분명합니다. 사용자가 게임 소프트웨어를 업데이트하는 데 큰 도움이 되며, 개발자가 게임 버그를 빠르게 수정하고 설치 패키지 크기를 줄일 수 있으며, 필요한 리소스를 런타임에 동적으로 로드할 수 있습니다.
둘
일반적으로 사용되는 핫 업데이트 프레임워크인 Tolua는 기본적으로 Unity에서 Lua를 실행할 수 있는 가상 머신을 제공하므로 Lua와 C#이 서로 호출하고 액세스할 수 있습니다.
먼저 간단한 질문으로 돌아가 보겠습니다. 왜 핫 업데이트에 Lua를 사용합니까? 우선 Lua는 인터프리터 언어로서 미리 블록으로 컴파일할 필요가 없고 런타임에 해석되어 실행된다는 점은 핫 업데이트의 특성에 부합합니다. 성숙한 프로젝트 경험이 많습니다.
- 기본 원리: 정적 바인딩을 통해 C#과 Lua 간의 상호 작용 실현
- TODO 자세한 코드 구현 및 구체적인 내용은 추후 첨부하겠습니다.
핫 업데이트의 기본 프로세스
- 버전 번호를 비교합니다. 버전 번호가 다른 경우 다음 프로세스를 계속합니다(version.txt에 버전 번호 기록, 선택 사항).
- 리소스 서버에서 비교 파일을 다운로드합니다(files.txt는 디렉터리와 유사하게 모든 파일의 md5 코드를 기록합니다).
- 다운로드 목록을 결정하고, 최근 다운로드한 비교 파일을 로컬 이전 비교 파일과 비교하고, 누락되거나 다른 파일을 기록합니다. (이 단계를 수행하려면 files.txt의 md5 코드를 사용하세요)
- 다운로드 목록에 따라 필요한 리소스를 다운로드하세요. (일반적으로 Application.pertantDataPath에 위치)
- 압축 해제(파일이 압축된 경우 먼저 압축을 풀어야 함, 선택 사항)
- 다운로드가 성공한 후 로컬 비교 파일이 최신 비교 파일(업데이트 디렉터리)로 덮어쓰이는지 확인하세요.
핫 업데이트 규칙
리소스 패키징 방법: 업데이트가 필요한 코드와 리소스를 AssetBundle(AB 패키지)로 패키징하여 다운로드 및 로딩해야 하며, AB 패키지의 특성은 핫 업데이트에 적합합니다. (이유는 다음과 같습니다)
- AB 패키지 저장 위치는 사용자 정의되며 핫 업데이트를 용이하게 하기 위해 읽기 및 쓰기 가능한 경로에 배치될 수 있습니다.
- AB 패킷 사용자 정의 압축 방법에서는 압축 없음을 선택하거나 LZMA 및 LZ4와 같은 압축 방법을 선택하여 패킷 크기를 줄이고 더 빠른 네트워크 전송을 활성화할 수 있습니다.
- 런타임 중 메모리 부담을 최소화하기 위해 리소스를 다양한 AB 패키지에 배포할 수 있으며 즉시 로드할 수 있으며 필요한 콘텐츠를 선택적으로 로드할 수 있습니다.
- AB 패키지는 이후 단계에서 동적 업데이트를 지원하여 초기 설치 패키지의 크기를 크게 줄입니다. 비핵심 리소스는 AB 패키지 형태로 서버에 업로드되고 이후 실행 중에 동적으로 로드되어 사용자 경험을 향상시킵니다.
리소스 저장 경로: Application.pertantDataPath에서 업데이트해야 하는 코드 및 리소스의 우선 순위를 지정합니다. 다른 특수 디렉터리와 비교하여 이 디렉터리는 읽기 및 쓰기가 가능하고 런타임에 유효하며 콘텐츠 제한이 없으므로 핫 업데이트 개발에 더 적합합니다. .
참고글: https://blog.csdn.net/Q540670228/article/details/122713401