保存具有多个顶点的网格时编辑器崩溃

问题描述 投票:0回答:1

执行

AssetDatabase.CreateAsset
保存具有大约 150,000,000 个顶点的网格时,编辑器崩溃。


我用C#脚本制作了一个网格对象,并尝试用

AssetDatabse.CreateAsset();
保存它。这是我保存资产的代码↓

AssetDatabase.StartAssetEditing();
AssetDatabase.CreateAsset(tempMesh, $"Assets/Export/{fileName}.asset");
AssetDatabase.StopAssetEditing();

tempmesh 的顶点约为 80,000 时,我可以保存网格(我已经添加了

tempMesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
),但如果约为 150,000,000,编辑器就会崩溃。

我正在考虑每 100,000 个顶点分离网格(制作 1,500 个网格),然后为每个网格生成对象。但我却尽量不想分开。

如何保存大约 150,000,000 个顶点的网格?

环境

  • MacBook Pro 2020,13 英寸,8GB RAM
  • 统一2020.3.47f1

日志

这是编辑器崩溃时的日志。

Obtained 46 stack frames.
#0  0x0000011048d0d1 in BytesToHexString(void const*, unsigned long, char*)
#1  0x0000011014044d in TextDOMTransferWriteBase<YAMLWrite>::TransferTypelessData(unsigned int, void*, TransferMetaFlags)
#2  0x0000011025898a in void VertexData::Transfer<YAMLWrite>(YAMLWrite&)
#3  0x0000010ff78f64 in void YAMLWrite::Transfer<VertexData>(VertexData&, char const*, TransferMetaFlags)
#4  0x00000111d3ab32 in void Mesh::Transfer<YAMLWrite>(YAMLWrite&)
#5  0x00000111d3a514 in void YAMLWrite::Transfer<Mesh>(Mesh&, char const*, TransferMetaFlags)
#6  0x000001106dabbf in void SerializedFile::WriteTextSerialized<Object>(core::basic_string<char, core::StringStorageDefault<char>>&, Object&, BuildUsageTag const&, TransferInstructionFlags)
#7  0x000001106da73e in SerializedFile::WriteObject(Object&, long long, short, BuildUsageTag const&, GlobalBuildData const&)
#8  0x000001106b9f6d in PersistentManager::WriteFile(core::basic_string_ref<char>, int, WriteData const*, int, GlobalBuildData const&, VerifyWriteObjectResult (*)(Object*, BuildTargetPlatform), BuildTargetSelection, TransferInstructionFlags, WriteInformation&, InstanceIDResolver const*, PersistentManager::LockFlags, int (*)(PersistentManager::ReportWriteObjectStep, int, core::basic_string<char, core::StringStorageDefault<char>> const&, int, void*), void*)
#9  0x000001106b8b23 in PersistentManager::WriteFile(core::basic_string_ref<char>, int, WriteData const*, int, GlobalBuildData const&, VerifyWriteObjectResult (*)(Object*, BuildTargetPlatform), BuildTargetSelection, TransferInstructionFlags, InstanceIDResolver const*, PersistentManager::LockFlags, int (*)(PersistentManager::ReportWriteObjectStep, int, core::basic_string<char, core::StringStorageDefault<char>> const&, int, void*), void*)
#10 0x000001110e11c8 in WriteObjectsToDiskThreadSafe(core::basic_string<char, core::StringStorageDefault<char>> const&, Object**, long long const*, unsigned long, TransferInstructionFlags)
#11 0x000001113e722f in CreateSerializedAssetV2(Object**, int, core::basic_string<char, core::StringStorageDefault<char>> const&, AssetDatabase::CreateAssetMask)
#12 0x00000111382c9c in AssetDatabase::CreateSerializedAsset(Object&, core::basic_string<char, core::StringStorageDefault<char>> const&, AssetDatabase::CreateAssetMask)
#13 0x00000111739d78 in AssetDatabaseBindings::CreateAsset(PPtr<Object>, core::basic_string<char, core::StringStorageDefault<char>> const&, ScriptingExceptionPtr*)
#14 0x000001117d7b04 in AssetDatabase_CUSTOM_CreateAsset(ScriptingBackendNativeObjectPtrOpaque*, ScriptingBackendNativeStringPtrOpaque*)
#15 0x000001b52959e5 in  (wrapper managed-to-native) UnityEditor.AssetDatabase:CreateAsset (UnityEngine.Object,string) {0x7fc4732dab20} + 0x65 (0x1b5295980 0x1b5295a6d) [0x151982960 - Unity Child Domain]
#16 0x000001824d2fab in  Cysharp.Threading.Tasks.CompilerServices.AsyncUniTask`1<MainAsync/<tengunMeshGenerator>d__3>:Run () {0x7fc471c24c10} + 0x2b (0x1824d2f80 0x1824d2fcb) [0x151982960 - Unity Child Domain]
#17 0x000001824dd2cb in  Cysharp.Threading.Tasks.Internal.ContinuationQueue:Update () {0x7fc4729ea3d0} + 0x1b (0x1824dd2b0 0x1824dd2d0) [0x151982960 - Unity Child Domain]
#18 0x0000015683b1f5 in mono_jit_runtime_invoke
#19 0x000001569d9213 in do_runtime_invoke
#20 0x000001569d916d in mono_runtime_invoke
#21 0x0000011064c197 in scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool)
#22 0x00000110647746 in ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool)
#23 0x00000110323cd9 in ExecutePlayerLoop(NativePlayerLoopSystem*)
#24 0x00000110323b65 in ExecutePlayerLoop(NativePlayerLoopSystem*)
#25 0x00000110323fb5 in PlayerLoop()
#26 0x00000110e930c2 in PlayerLoopController::UpdateScene(bool)
#27 0x00000110e8d207 in PlayerLoopController::UpdateSceneIfNeeded()
#28 0x00000110e8a664 in Application::TickTimer()
#29 0x000001121bca3f in -[EditorApplication TickTimer]
#30 0x007ff805399766 in __NSFireTimer
#31 0x007ff8044e9358 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__
#32 0x007ff8044e8ed3 in __CFRunLoopDoTimer
#33 0x007ff8044e8af9 in __CFRunLoopDoTimers
#34 0x007ff8044cee39 in __CFRunLoopRun
#35 0x007ff8044cdf31 in CFRunLoopRunSpecific
#36 0x007ff80df49dad in RunCurrentEventLoopInMode
#37 0x007ff80df49bbe in ReceiveNextEventCommon
#38 0x007ff80df49918 in _BlockUntilNextEventMatchingListInModeWithFilter
#39 0x007ff8075625d0 in _DPSNextEvent
#40 0x007ff80756147a in -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]
#41 0x007ff807553ae8 in -[NSApplication run]
#42 0x007ff807527d02 in NSApplicationMain
#43 0x000001121d856d in EditorMain(int, char const**)
#44 0x000001121d8799 in main
#45 0x007ff80409a41f in start
Launching bug reporter
c# unity-game-engine assets
1个回答
0
投票

我认为这是由于内存不足造成的。您的设备总共有 8 GB RAM,不包括系统和不同应用程序操作的空间。在这种情况下,总可用内存可能为 6 GB 甚至更少。 我建议在生成 150,000,000 个网格时检查活动监视器。顶点,这将让您查看是否超出了可用资源量

© www.soinside.com 2019 - 2024. All rights reserved.