public static Color[] GetSafePixels(this Texture2D texture, Rect?crop = null) { Color[] pixels = null; Texture2D source = texture; bool isReadable = false; BabylonTextureImporter importTool = null; string srcTexturePath = AssetDatabase.GetAssetPath(texture); if (srcTexturePath.IndexOf("unity_builtin_extra", StringComparison.OrdinalIgnoreCase) >= 0) { source = texture.RenderToTexture(); } else { importTool = new BabylonTextureImporter(srcTexturePath); isReadable = importTool.IsReadable(); if (!isReadable) { importTool.SetReadable(); } } try { if (crop != null && crop.HasValue) { pixels = source.GetPixels((int)crop.Value.x, (int)crop.Value.y, (int)crop.Value.width, (int)crop.Value.height); } else { pixels = source.GetPixels(); } } catch (Exception ex) { UnityEngine.Debug.LogException(ex); } finally { if (importTool != null && isReadable == false) { importTool.ForceUpdate(); } } return(pixels); }