我再代码里使用了 NativeArrayUnsafeUtility.SetAtomicSafetyHandle 这个 API,但是在打 Android 包的时候出现了编译错误:
'NativeArrayUnsafeUtility' does not contain a definition for 'SetAtomicSafetyHandle'
但实际上这个代码应该是存在的:
这就非常诡异了,而且我在国内网站查资料也没有说法,Unity 的官方文档也没有什么说法。之后我在国外论坛上看到有人报相同的错误:
NativeArrayUnsafeUtility seems to not work in builds - Unity ForumI've been using it for SetAtomicSafetyHandle. It works fine in editor, but when I attempt to build the project, I get a build error claiming that...https://forum.unity.com/threads/nativearrayunsafeutility-seems-to-not-work-in-builds.1153067/ 说是需要加上 ENABLE_UNITY_COLLECTIONS_CHECKS 的宏:
#if ENABLE_UNITY_COLLECTIONS_CHECKS
NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref job.HeightMap1, AtomicSafetyHandle.Create());
NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref job.HeightMap2, AtomicSafetyHandle.Create());
NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref job.HeightMap3, AtomicSafetyHandle.Create());
NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref job.HeightMap4, AtomicSafetyHandle.Create());
#endif
按照论坛里的说法,这个 SetAtomicSafetyHandle 在打包出项目的时候是不需要的,只在编辑器下才需要这个操作。
但是我还没有测试过真机是否正确,后面会测试下真机的结果,再补充上来。
.