Unityのざっとした紹介

#はじめに
ここ数ヶ月のeeic2015のタイムラインを見ているとぽろぽろと"unity"の文字をみる機会が増えたように感じたので、少しでも自分の知ってることをシェア出来ればと思いこの記事を書きました。知ってることといってもテクニカルな部分については他に星の数ほど良記事があると思うので、ここでは
「unityって単語だけ知ってる」「みんなすごいすごい言ってるけど何ができるか知らん」
などと思っている人向けです。ここで少しでも興味をもってunityで圧倒的成長できる人が1人でも増えると大変嬉しいです。
#unityってなに？？
一言でいうと「ゲームエンジン」です。
ゲームの開発のために必要な環境をほぼ全てこのソフトウェアが提供してくれます。unityで作られたゲームで有名なものだと「[ドラゴンクエストⅧ(スマホ移植版)](http://www.jp.square-enix.com/dqsp/dq8/#index)」や、「[魔法使いと黒猫のウィズ](http://colopl.co.jp/magicianwiz/)」などが挙げられます。ゲームエンジンと言うと有名なところでは「RPGツクール」や「Unreal Engine」などが挙げられますが、unityが特に今注目されているのには既存のエンジンにはないメリットが存在するためです。次にこれを説明していきましょう。
#unityはなにがすごい？？
##ほぼ無料
ほぼ無料というとどうしても最近のスマホゲームのせいでお得感がかなり薄く感じてしまいますが、実際unityでの開発にかかる費用は後で説明するAssetの購入とプロ版への拡張以外全て無料です。ここにunityのもたらしたブレイクスルーの一端があります。unity以前のゲームエンジンは基本的にゲーム制作会社内において自社の製品を効率良く作るために開発されたものがほとんどでした。したがって公開されたとしても非常に高額であるか、その機能を制限されていることが多かったようです。unityは無料でほぼフルに機能を使えるだけでなく、開発したゲームの公開についても制限なく行うことができます。
##プラットフォームごとに開発する手間が少ない
ゲームを開発する際に必ず意識しなければならないのは、そのゲームがどのような環境で遊ばれるかということです。スマホアプリ開発をやった経験のある方はわかると思いますが、通常iOS用かandroid用かで使用する言語も、実装方法もかなり異なります。しかしunityではビルドの際にどのプラットフォームを使うかを選択するだけで、各端末に対応することができます(iOSはXcode,AndroidはAndroid Studioで再度ビルドする必要があります)。
##シェアされているデータが豊富
RPGのゲームを開発することを考えてみます。これまでやったことのあるRPGを再現しようとしてみてください。配置すべきオブジェクトを考えてゆくと、その種類が膨大になることは容易に予想できますね。敵キャラ、武器、回復アイテム、マップ上の建物…これらを自分で全て用意するのは簡単ではありませんし、自分のゲーム開発のモチベーションと異なると思うひともいるでしょう。unityではこのようなゲーム上で必要な「部品」をシェアしたり、購入できる[Asset Store](https://www.assetstore.unity3d.com/jp/)というものがあります。Assetとはunityでゲームを構成する要素（3Dモデル、マップ、ライト、スクリプトなど）を指す言葉です。要素のなかにスクリプトを入れたように、Asset Storeではゲーム内のオブジェクトばかりでなくセーブ機能を提供するAssetや、SNS投稿をサポートするAssetなどが存在します。このようにプログラムを組むのが苦手なひとでも開発がしやすい環境が整っています。
##ハードウェアとの連携
有力なアプリケーション、ハードウェアとの連携が公式にサポートされていたり、Assetがすでに存在することでより開発の可能性をひろげることが可能です。特に最近注目されているVRとの連携がつよく、現在あまり出回っていないVRのソフトの開発にunityが使用される機会が増えているようです。僕がunityに触ったきっかけもVRで、[Oculus Rift](https://www.oculus.com/en-us/)(HMDのひとつ)のソフト開発から始めました。HMDのソフト開発といっても、配布されているパッケージを使うだけでほぼ通常のソフト開発と変わらずに行うことができます。VRだけでなく他のハードウェアではシリアル通信をもちいたarduinoとの連携なども比較的簡単に行えます。（eeic生なら[BDM](http://togetter.com/li/448381)でなにかつかえるかも…）
#もうちょっと詳しく
簡単にunityの概要を説明したところでもう少しだけ具体的な開発の話を説明しようと思います。
##使用言語
使用できる言語は以下の3つです。
- C#
- JavaScript(Unity Script)
- Boo
3つもあったらどうしたらええんじゃって感じかもしれませんが僕としては強く**C#**をオススメします。まず一つ目の理由はunityユーザーを利用しているユーザー内での人気です。全ユーザーの8割がC#でスクリプトを書いているらしいです。(参考(http://mikumikuplay.com/it/which_language_is_best_in_unity/ ))　ユーザーの多さはそのままweb上でのレファレンスの数に直結するので実際の開発では大変重要な要素になります。最初僕はJavaScriptで始めようとしましたが、見るサイト見るサイトC#でコードが書いてあるのですぐにC#に代えました…
多少web開発をやったことのある人ならJavaScriptでいいわ、と思ったかもしれません。しかしunityで使われているJavaScriptはJavaScript(JavaScriptとは言っていない)状態です。かなりunity独自の表現が多く、すでにJavaScriptに習熟しているひとでもほぼ1から勉強することになります。なのでこれをUnity Scriptと表現する場合もあります。他の場所で応用の効かないことからあまりユーザーも多くないみたいです。
Booですが、すいません、ここ以外で聞いたことない言語です。欧米にユーザーが多い？らしいです。 
##ざっくり開発の流れ
ではここでとても簡単にですが、実際の開発のイメージを掴んでもらうために開発の流れを説明しようと思います。
###プロジェクトの作成
プロジェクトとはunityではゲーム全体をさす一番大きな枠組みです。ここでゲームの名前などを決めます。
###シーン作成
シーンはゲームを構成する画面ごとの単位です。タイトル画面、プレー画面、アイテム画面などの単位でシーンを作成していきます。
###スクリプト作成
ここでコーディングを行います。オブジェクトの動きだけでなく、シーン間の遷移などもスクリプトから指定していきます。
###unity上でテスト
unity上でここまでで出来上がった部分を断片的にテストすることができます。おおまかなデバッグと言っていいでしょう。
###unity上でビルド
テストがすべての部分で成功したらプラットフォームを指定してビルドします。スマホアプリの開発ではここから各開発環境で再度ビルドが必要です。

以上が開発の流れになります。かなり簡単にしか書いていないので、なんとなくでもイメージができたら僕としては御の字です。


#最後に
unityのざっくり紹介とのことでしたが、無駄に長文になってしまった気がします…ためになったかは自信がありませんが、みなさんのunityへのハードルがすこしでもさがってくれればと思います。BDMで僕もなにかで使えたらなあとか妄想していますがいかんせん時間がないですね…。