Unity2017.3のリファレンスを意訳する(1.パッケージ全体概要)

# 概要
なぜUnity2017.3のリファレンスを意訳するのか


## Unity入門者の足がかりとして
  - 現在のインタラクティブコンテンツ開発シーンにおいて、UnityやUE4を学んでおくことは非常に重要となっています。
  - そのための入門書なども沢山あるため、入り口の障壁は割と低くなっていると思います。
  - しかし、入門から次の段階に行くために重要な公式リファレンスについて、特に日本語の情報があまり充実しているとは言えません。
  - そのため、Unityの恩恵に預かっている一員として、リファレンスの意訳という形でコミュニティに貢献しようというのが僕の動機です。


## これまでのUnityのスタンダードとして
  - Unity2018.1bについて、Jobシステムなどの更新が発表され、システムや開発手法などがまた一歩更新されることになります。
  - 実際に2018.1bではパッケージの割り方などにも、今までと少し違う点があるようです。
  - それに伴い、今までの手法で行われる開発で一つの区切りとなるのが2017.3であると判断しました。
  - そのため、この区切り部分の情報を固め、枯れさせる事で、今後の日本の開発を安定させられると考えています。そのために2017.3を選択しました。


##内容と書き方について
- **書き方**
  - できるだけトップダウンを意識し、粒度を揃えた分類で提供しようと思います。
  - まずは名前空間それぞれから初めて、それぞれに収められているクラスやパッケージなどに掘り下げて行くつもりです。
  - 短い時間で完成できるものではないと思うので、ゆっくりと更新していきます。いいねなどをしていただければ更新時に通知されるため、ご利用の方は検討してください。
  - 内容に誤解や、補足情報があればコメントをお願いします。できるだけ内容に反映させる方向で更新していきます。

- **EngineとEditor**
  - Unityはゲームエンジンとして、開発者のために非常に多くの機能を提供しています。
  - その機能は基本的に2つに分類されており、コンテンツを動かすためのEngine部分と、エディターを拡張する事で開発シーンを助ける機能を提供するEditor部分に別れています。
  - 通常はこれらを別物として扱いますが、今回は「何に関連して用意されているのか」に着目しているため、あえて近い距離に置いています。
  - エディター部分の拡張をする事でUnityの最大限のパフォーマンスを引き出すということについて、より多くの人に関心を持ってもらい、もっとUnityそのものと親しくなってもらうためです。
  - この表記が読みやすいものである事を祈ります。






# パッケージとそれぞれの中身

## 基幹パッケージ
- 概要
  - EngineとEditorを切り分ける分類用のパッケージをこの文書では「基幹パッケージ」と読んでいます。正しい用語があれば教えてください。
  - また、基幹パッケージにも、それぞれの用法で基本となる機能を提供するクラスやインタフェース、定数、属性が置かれており、多くの部分で使われています。

- 含まれているパッケージ
  - UnityEngine
  - UnityEditor
  - Other
- Otherについて
  - 特定のパッケージに依存している訳ではないが、開発する上で重要なクラスなどを、擬似的にOtherパッケージとして分類しているらしい？
  - もしくはC#の機能をUnityのためにラッピングしているものなど。
  - 実態としては、SystemやSystem.collectionなどのパッケージに分類されているものが多い。



## 実行環境関連
- 概要
  -  コンテンツ開発に当たって問題になるのが様々なデバイスやプラットフォームの違いです。
  -  Unityはマルチプラットフォームのために、それらの違いをできる限り吸収してくれるようになっていますが、同時にそれぞれの特色を省いてもいます。
  -  その上で、Unityはそれぞれの実行環境ごとに、それぞれの特別な機能を生かすための窓口を用意しています。
  -  いかにそれらの機能が収められたパッケージをまとめました。

-  Engine
  - UnityEngine.Apple
  - UnityEngine.iOS
  - UnityEngine.Accessibility
  - UnityEngine.Tizen
  - UnityEngine.Windows
  - UnityEngine.WSA
  - UnityEngine.SocialPlatforms
  - UnityEngine.XR

-  Editor
  - UnityEditor.iOS
  - UnityEditor.XR





## メディア関連
- 概要
  - 主に画像や音声など、コンテンツからユーザーに情報を伝えるための手段についてまとめています。
  - 特にユーザーからの入力を受け取る役目も持っているUIなどは非常に重要なため、使われることが多いパッケージです。

-  Engine
  - UnityEngine.Audio
  - UnityEngine.Experimental
  - UnityEngine.Rendering
  - UnityEngine.U2D
  - UnityEngine.Sprites
  - UnityEngine.UI
  - UnityEngine.Video

-  Editor
  - UnityEditor.Experimental
  - UnityEditor.IMGUI
  - UnityEditor.Rendering
  - UnityEditor.Animations
  - UnityEditor.Media
  - UnityEditor.Sprites
  - UnityEditor.UI


## イベント関連
- 概要
  - イベントとは「ある状態になったら、特定の動作をしてほしい」という時に、その状態や動作を定義するものです。
  - 例えば、ボタンが押されたら変数の値を＋１してほしいなどです。
  - Unityではこうしたイベントについて、Inspectorからインスタンスと関数を指定して渡すことで、コードレベルでの依存関係をなるべく減らせるように設計しています。
  - イベントは使いすぎると振る舞いが複雑になりますが、適度に使えば再利用性の高いコードを書くことができる強力な機能です。ぜひ使いこなしてください。

-  Engine
  - UnityEngine.Events
  - UnityEngine.EventSystems

-  Editor
  - UnityEditor.Events
  - UnityEditor.EventSystems


## 経路探索(AI)
- 概要
  - 一般的にAIというと、人間を模倣する知性や、ディープラーニングなどの情報解析技術などが有名です。
  - ただしUnityはまだそれらの機能を公式に提供している訳ではなく、中身は「経路探索」という、ある地点からある地点への移動を扱うものとなっています。
  - 経路探索も弱いAIの一種ですが、あまり一般の人にわかりやすい表現ではないため、特に取り上げて説明しました。

-  Engine
  - UnityEngine.AI

-  Editor
  - UnityEditor.AI

## タイムライン
- 概要
  - Timelineは2017から導入されたシステムで、映画のカットのようなものを作れます。
  - 具体的にいうと、時間に対して複数のAudio, Animation, Camera, GameObjectの振る舞いを簡単に設定できます。

-  Engine
  - UnityEngine.Timeline

-  Editor
  - UnityEditor.Timeline


## 運営用機能
- 概要
  - Unityではゲーム開発の民営化を標語として掲げています。
  - これは作ることだけでなく、サービスの運営やマネタイズまで含めた「開発」で、それらをサポートする機能も用意されています。
  - ここにある機能を使うことで、上記のような場面でよりUnityを使うメリットを感じられるようになるでしょう。

-  Engine
  - UnityEngine.Advertisements
  - UnityEngine.Analytics
  - UnityEngine.CrashReportHandler

-  Editor
  - UnityEditor.Advertisements
  - UnityEditor.Analytics
  - UnityEditor.CrashReporting
  - UnityEditor.Purchasing



## 開発支援
- 概要
  - 開発を行うために必要・便利な機能がまとめられています。
  - ある地点での状態を証明するAssertionや、パフォーマンスを調べるためのProfilingなど、少し特異なものが多いです。
  - 使いこなすことができれば一段上の開発ができるようになる機能がまとまっています。
-  Engine
  - UnityEngine.Assertions
  - UnityEngine.Profiling
  - UnityEngine.TestTools
  - UnityEngine.Scripting
  - UnityEngine.Serialization

-  Editor
  - UnityEditor.Build
  - UnityEditor.Compilation
  - UnityEditor.MemoryProfiler
  - UnityEditor.TestTools



## その他
- 概要
  - Unityの機能は多岐に渡ります。
  - 今回は基幹パッケージの大まかな分類(だいたいどんなことができて、何があるのか)がわかりやすいようにするのが目的だったため、以下の部分はその他としてまとめました。
  - これらの機能は解説が多いか、単独で強力に機能するため、他と混ぜていません。
  
-  Engine
  - UnityEngine.SceneManager
  - UnityEngine.Networking

-  Editor
  - UnityEditor.Callbacks
  - UnityEditor.Networking
  - UnityEditor.PackageManager
  - UnityEditor.SceneManagement
  - UnityEditor.VersionControl


# 参考
公式リファレンス https://docs.unity3d.com/2017.3/Documentation/ScriptReference/index.html