# v0.46

## commit

`ce8c`

## バグ修正

### ImporterContext.Destroyの修正

Runtimeのリソース破棄に使えるように仕様変更しました。
詳細は、`APIの変更` - `ImporterContext.Destroy` を参照。

### BlendShapeProxyでマテリアルのクリア挙動を修正しました

毎フレームマテリアルの基準値にクリアしていたので、変化していないときにセットするのをやめると元に戻ってしまう。

* https://github.com/dwango/UniVRM/issues/72

### thumbnail設定の復旧

* https://github.com/dwango/UniVRM/issues/62

## Importer

### float値にNan、Infがあったときにパース出来るようにした

* ToDo: ExporterでNan Infを検知すべき

### Unity2018.3対応

```csharp
#if NET_4_6 || NET_STANDARD_2_0
```

### Import時に既存のファイル(BlendShapeClip, BlendShapeAvatar, Material)を上書きしない

* https://github.com/dwango/UniVRM/issues/56

改めて作成させるには対象のVRMから作成されたMaterialとBlendShapeClipとBlendShapeAvatarアセットを削除したのちに、vrmファイルをreimportしてください(右クリックのメニューなどからできます)。

## Exporter

### 非アクティブオブジェクトのスキップ

エクスポート時に非アクティブのノードのメッシュエクスポートをスキップするようにしました。

## Component

### VRMFirstPerson.Setupの最適化

設定が `auto` のとき SubMesh の index 配列(`mesh.getIndices`)が長い(10万以上)モデルで異常に負荷がかかるのを修正しました。

## APIの変更

### BlendShapeProxy.SetValue(key, value, immediately)

3引数 `SetValue` の代わりに２引数の明示的な関数を用意しました。

#### AccumulateValue

値を貯めて、後で `Apply` したときに反映する。
`SetValues` の最後にも `Apply` されます。

```csharp
void BlendShapeProxy.AccumulateValue(key, value)

// [Obsolete] SetValue(key, value, false)
```

#### ImmediatelySetValue

即反映する。

```csharp
void BlendShapeProxy.ImmediatelySetValue(key, value)

// [Obsolete] SetValue(key, value, true)
```

### ImporterContext.Destroy

```csharp
ImporterContext.Destroy(bool destroySubAssets)
```

が名前から期待される動作をしていないので `Obsolete` にして用途を明確にした関数を用意しました。

#### DestroyRootAndResources

runtimeインポーター向けのリソース解放。
追加したDisposeはこれを呼びます。

#### EditorDestroyRoot

editorインポート時のprefabの元になったGameObjectをシーンから削除。
旧Destroy(destroySubAssets=false)

#### EditorDestroyRootAndAssets

editorインポート時にエラーが発生した場合などに作ったアセットを削除する。
旧Destroy(destroySubAssets=true)
