# TestMultiSceneLightmap **Repository Path**: andersonunity/test-multi-scene-lightmap ## Basic Information - **Project Name**: TestMultiSceneLightmap - **Description**: No description available - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-18 - **Last Updated**: 2021-01-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TestMultiSceneLightmap #### 介绍 测试加载多个场景时,光照贴图的变化。 资源的打包和加载使用的是Addressable-CN. 加密需要单独编写一个代码BlackholeAESStreamProcessor.cs;这个代码需要在两个工程都放置。 ### 问题0 - 使用加密模式后,会出现异常 ```Text ObjectDisposedException: Cannot access a closed Stream. System.IO.__Error.StreamIsClosed () (at <9577ac7a62ef43179789031239ba8798>:0) System.IO.MemoryStream.set_Position (System.Int64 value) (at <9577ac7a62ef43179789031239ba8798>:0) UnityEngine.ResourceManagement.ResourceProviders.AssetBundleResource.GetAssetBundle () (at Library/PackageCache/com.unity.addressables.cn@1.17.0/Runtime/ResourceManager/ResourceProviders/AssetBundleProvider.cs:252) UnityEngine.ResourceManagement.ResourceProviders.SceneProvider+SceneOp.Execute () (at Library/PackageCache/com.unity.addressables.cn@1.17.0/Runtime/ResourceManager/ResourceProviders/SceneProvider.cs:64) UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1[TObject].InvokeExecute () (at Library/PackageCache/com.unity.addressables.cn@1.17.0/Runtime/ResourceManager/AsyncOperations/AsyncOperationBase.cs:466) UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1[TObject].<.ctor>b__34_0 (UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle o) (at Library/PackageCache/com.unity.addressables.cn@1.17.0/Runtime/ResourceManager/AsyncOperations/AsyncOperationBase.cs:118) UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationBase`1+<>c__DisplayClass55_0[TObject].b__0 (UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle`1[TObject] s) (at Library/PackageCache/com.unity.addressables.cn@1.17.0/Runtime/ResourceManager/AsyncOperations/AsyncOperationBase.cs:309) DelegateList`1[T].Invoke (T res) (at Library/PackageCache/com.unity.addressables.cn@1.17.0/Runtime/ResourceManager/Util/DelegateList.cs:69) UnityEngine.Debug:LogException(Exception) DelegateList`1:Invoke(AsyncOperationHandle`1) (at Library/PackageCache/com.unity.addressables.cn@1.17.0/Runtime/ResourceManager/Util/DelegateList.cs:73) UnityEngine.ResourceManagement.AsyncOperations.<>c__DisplayClass55_0:b__0(AsyncOperationHandle`1) DelegateList`1:Invoke(AsyncOperationHandle`1) (at Library/PackageCache/com.unity.addressables.cn@1.17.0/Runtime/ResourceManager/Util/DelegateList.cs:69) UnityEngine.AsyncOperation:InvokeCompletionEvent() ``` - 异常的代码为: ```c# //AssetBundleProvider.cs //Line 251, 252 //... inputStream.Dispose(); inputStream.Position = 0; //... ``` - 参考网上资料 [C# MemoryStream.Dispose之后,为什么仍可以ToArray()?](https://www.cnblogs.com/wolf-sun/p/3925477.html) ```c# //set=0之前,会检测stream是否被dispose了,是的话就会触发异常 public override long Position { get { CheckIfClosedThrowDisposed (); return position - initialIndex; } set { CheckIfClosedThrowDisposed (); if (value < 0) throw new ArgumentOutOfRangeException ("value", "Position cannot be negative" ); if (value > Int32.MaxValue) throw new ArgumentOutOfRangeException ("value", "Position must be non-negative and less than 2^31 - 1 - origin"); position = initialIndex + (int) value; } } ``` - 将215,252代码调整为,执行正确 ```c# //inputStream.Dispose(); //inputStream.Position = 0; if(inputStream.CanSeek) { inputStream.Position = 0; } inputStream.Dispose(); ``` ### 问题1 - 如果出现crc或iostream header错误,有可能是之前下载了未加密的资源(在缓存中),而当前又使用了加密后的资源,造成的错误 - 解决方法是,手动清除缓存(即删除缓存文件),问题解决 ## 问题2 - 提示没有Visual Studio 2015 C++ Compiler & Win 10 SDK - 在Visual Stuido Install中将可能与之相关的包都勾选,重试OK