UnityでGoogle Maps Viewを利用したときの "Unsupported texture format" の対応方法

# 概要

Unityで[Google Maps View](https://assetstore.unity.com/packages/tools/integration/google-maps-view-82542)を使ってマーカーを差し替える時に`Unsupported texture format - Texture2D::EncodeTo functions do not support compressed texture formats.` が出てハマったのでメモとして残しておきます。

# 結論

リソースをインポートした後に
![image.png](https://qiita-image-store.s3.amazonaws.com/0/56178/a9e208f6-21d7-ef4e-09f9-5294205da6af.png)

設定を以下のように変える。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/56178/d30e3e0f-5dc3-8e7f-0540-4726efdb5c69.png)

## 詳細

[Google Maps View](https://assetstore.unity.com/packages/tools/integration/google-maps-view-82542)は、UnityでAndroid/iOSアプリ作る際にGoogleマップを利用するためのAssetです。
導入自体は[ドキュメント](https://github.com/NinevaStudios/unity-google-maps-docs/wiki)にまとまっているので割愛します。

Googleマップのマーカーをカスタムする際は[Drawing Elements on the Map](https://github.com/NinevaStudios/unity-google-maps-docs/wiki/Drawing-Elements-on-the-Map#markers)にあるように`.Icon(ImageDescriptor.FromAsset("ファイル名")`で変更できます。

```C#
// Exampleより
Marker marker = _map.AddMarker(CreateInitialMarkerOptions());

static MarkerOptions CreateInitialMarkerOptions()
{
    const float LondonLatitude = 51.5285582f;
    const float LondonLongitude = -0.2417005f;

    // Create a amrker in London, Great Britain
    return new MarkerOptions()
        .Position(new LatLng(LondonLatitude, LondonLongitude))
        .Icon(ImageDescriptor.FromAsset("map-marker-icon.png")) // image must be in StreamingAssets folder!
        .Alpha(0.5f) // make semi-transparent image
        .Anchor(0.5f, 1f) // anchor point of the image
        .InfoWindowAnchor(0.5f, 1f)
        .Draggable(true)
        .Flat(false)
        .Rotation(30f) // Rotate marker a bit
        .Snippet("Snippet Text")
        .Title("Title Text")
        .Visible(true)
        .ZIndex(1f);
}
```

`ImageDescriptor`は`FromAsset()`の他に**FromTexture2D()**というメソッドがあり今回はそちらを使いました。

利用したいリソースをインポートした後
![image.png](https://qiita-image-store.s3.amazonaws.com/0/56178/a9e208f6-21d7-ef4e-09f9-5294205da6af.png)

```C#
// インポートしたリソースを設定する
public Texture2D icon;

Marker marker = _map.AddMarker(CreateInitialMarkerOptions());

static MarkerOptions CreateInitialMarkerOptions()
{
    const float LondonLatitude = 51.5285582f;
    const float LondonLongitude = -0.2417005f;

    // Create a amrker in London, Great Britain
    return new MarkerOptions()
        .Position(new LatLng(LondonLatitude, LondonLongitude))
        .Icon(ImageDescriptor.FromTexture2D(icon)) // ←ここをFromAsset()からFromTexture2D（）に変更
        .Alpha(0.5f) // make semi-transparent image
        .Anchor(0.5f, 1f) // anchor point of the image
        .InfoWindowAnchor(0.5f, 1f)
        .Draggable(true)
        .Flat(false)
        .Rotation(30f) // Rotate marker a bit
        .Snippet("Snippet Text")
        .Title("Title Text")
        .Visible(true)
        .ZIndex(1f);
}
```

このままAndroidで実行するとマーカーが表示されません。
Logcatを見ると以下のログが出ていました。

```
2019-02-19 12:39:41.933 17365-17381/com.sample.sampleApp E/Unity: Unsupported texture format - Texture2D::EncodeTo functions do not support compressed texture formats.
    UnityEngine.ImageConversion:EncodeToPNG()
```

対応していないCompressionの設定だったみたいなので、結論に書いたように変更したところ表示されるようになりました。