UNITY_BRANCH這個宏在下列平台中被定義為[branch]:
D3D11、GLCore、GLES3、Metal、PSSL、Switch、Vulkan、XBoxOne
意為如果if表達式為false,不執行if中的語句。詳見MSDN。
而在GLES2和不可識别的平台上被定義為空,則不論表達式的結果是什麼,都會執行所有分支的語句。可能是在這類平台上不支援[branch]特性的關系,這一點有待确認。
UNITY_UNROLL這個宏在下列平台中被定義為[unroll]:
D3D11、GLCore、GLES3、Metal、PSSL、Switch、Vulkan、XBoxOne
意為基于循環次數展開循環。詳見MSDN。
而在GLES2和不可識别的平台上被定義為空,根據文檔的說明,這種情況下首先嘗試不展開循環,如果嘗試失敗,才使用展開循環的版本。可能是這類平台自身指令數的限制,展開循環容易導緻指令數過多,這一點有待确認。