EgretEngineとUnityを連動させてみる(1)

# 公式ドキュメントの翻訳
公式ドキュメント：
http://developer.egret.com/cn/docs/3d/tutorials/unityplugin/README.html

ダウンロード：
https://github.com/egret-labs/egret3d-unityplugin/

## Unityリソースのエクスポート
Egret3Dを使う開発者の多くはUnity3Dでの開発経験があるので、EgretEngineの開発チームはUnity3Dエクスポートプラグインを開発しました。

プラグインが目指していないコト

- 既存のUnity3Dエンジンのリソースは、Egret3Dが必要とするフォーマットにエクスポートできます
- 既存のUnity3DゲームをWebゲームに移植するために必要な作業量を最小限に抑える

プラグインが目指していること
- ワンボタンでUnity3DゲームをWeb版として公開する
- Unity3Dゲームのピクセルレベルでの完全なレンダリングの再現

## 機能紹介
このプラグインには現在、次の2つの機能が含まれています

- Unity3Dシーンファイルとすべての内部リソースをEgret3Dが対応するリソース形式にエクスポートする
- 複数のUntiy3D PrefabをEgret3Dが対応するリソース形式への一括エクスポート

## バージョンサポート
このプラグインは現在、Unity5とUnity2017のバージョンをサポートしています。このプラグインは、Unity 5.6以下のプランをサポートしていません。

## 予備的準備
1. Egret3D Unityエクスポートプラグインをダウンロードする
2. Egret3DExportToolsフォルダをUnityプロジェクトのアセットフォルダにコピーします。
3. Unityエディタメニューには、Egret3DExportToolsオプションが追加されています。クリックすると開きます。
4. エクスポートされたファイルを保存するパスを選択します。

### 重要事項
プラグインをUnityプロジェクトに読み込んだ後は、プラグインのコンパイルが完了するのを待ってください。途中で、Unityはバージョンがマッチしないのでアップグレードするように警告を出した場合には、"No"ではなく"アップグレードする"を選択して次へ進んでください。もし"No"を選択すると、エクスポートの途中に"Method not found: UnityEngine.Texture2D.EncodeToJPG"エラーが表示されます。このエラーが表示されたらプラグインを再インストールしてください。

## Unity3Dシーンのエクスポート
シーンエクスポート機能を選択すると、現在アクティブなシーンが.scene.jsonファイルとして書き出されます。
エクスポートしたファイルをあなたのEgret3Dのリソースフォルダに置きます。

### 重要事項
リソースがリソースフォルダのルートパスにエクスポートされていることを確認してください。現在、ルートパスへのエクスポートのみがサポートされています。

1. Egret3Dプロジェクトで`egret bake`してリソースをベークしてください
1. プロジェクトに次のコードを追加してシーンを読み込みます

```ts
await RES.getResAsync("your.scene.json");
paper.Application.sceneManager.loadScene("your.scene.json");
```

## Unity3Dプレハブをエクスポートする
- リソースエクスポート機能を選択すると、現在アクティブになっているシーンが`.prefab.json`ファイルとして書き出されます。
- エクスポートしたファイルをあなたのEgret3Dのリソースフォルダに置きます。
- Egret3Dプロジェクトで`egret bake`してリソースをベークしてください
- 次のコードを使用してシーンにプレハブを追加する

```ts
await RES.getResAsync("your.prefab.json");
const prefab = RES.getRes("your.prefab.json") as egret3d.Prefab
const brick1 = prefab.createInstance()
```

## サポートコンポーネントリスト
- Transform
- MeshFilter
- MeshRenderer
- Camera
- BoxCollider(エンジンがサポートしていません)
- SkinnedMeshRenderer
- ParticleSystem(一部サポート)
- ParticleRenderer
- Animation(一部サポート)
- Animator(一部サポート)

## 予防措置

- Animationコンポーネントは、一時的に次のプロパティのみをエクスポートします。
 - m_LocalPosition
 - m_LocalRotation
 - localEulerAnglesRaw
 - m_LocalScale
 - m_IsActive
- "Animator"は、"Egret3D"の"Animation"コンポーネントとしてエクスポートされます。ステートマシンのデータは一時的に非対応です。
- パーティクルコンポーネントは、次のモジュールのみを一時的にサポートします。
 - MainMoudle
 - Emission
 - Shape
 - VelocityOverLifetime
 - ColorOverLifetime
 - SizeOverLifetime
 - RotationOverLifetime
 - TextureSheetAnimation
- パーティクルシステムのシェーダーはパーティクルディレクトリの中のシェーダーである必要があります。そうでないとパーティクルシステムはEgret3Dでは表示されないかもしれません。
- 開発作業を容易にするために、Shaderをエクスポートする時は、もとのUnity プロジェクトのシェーダーの名前マッピングを利用します。例えばレガシーな`Shader/Diffuse`は`Egret3D/Diffuse`に変換されます。Egret3Dは限られたShaderしか対応していないからです。もし適切なものが見つからなければ、デフォルトで`Egret3D/Diffuse`という名前に変換されます。
- ライトマップをエクスポートする際は、外部アプリケーションを利用して`.exr`形式の画像を`.png`形式の画像に変換します。アンチウイルスソフトウェアがこの処理をブロックする可能性がらいます。一時的にアンチウイルスソフトを切ることでこの問題は解決します。
- NavMesh機能のエクスポートは一時的にサポートされていません。
- コリジョンシステムは開発中です。BoxColliderコンポーネントはデータのサポートのみを提供するようになりました。


## 問題のフィードバック
Egret3D Unity エクスポートプラグインは、既存のUnity3Dゲームを移植するために必要なすべての機能が提供されていません。そのためこのツールを使うと、エクスポートが失敗したり、エクスポートしたデータが壊れているかもしれません。その場合はこちらからご連絡ください。問題に速やかに対応するためには、ゲームリソースを可能な限りコンパクトにして添付してください。