Unityを使ってスマホアプリを配信するまでに使用したアセットの解説

##経緯
Unityを使い始めて２ヶ月ほどで、アプリ内課金機能を持ったアプリをAndroidで配信することができました。
これもUnityという開発プラットフォームが優れているからであり、またアプリ制作に必要な項目をアセットのインポートによって大幅に工数を削減できたからに他なりません。
そんなアセットを感謝の気持ちで８つ紹介していきたいと思います。


##環境
- Unity 5.5.0f3
- Windows10 64bit

## GodTouch(無料)
[【UnityAsset】GodTouch – Unityエディタ上でタッチの動作を確認できる | てんぷらの館](http://okamura0510.jp/%E9%96%8B%E7%99%BA%E3%83%96%E3%83%AD%E3%82%B0/godtouch/)
このアセットを用いて、Unity上のテストと実機テストをシームレスで実現できました。
Android機にインストールしてどんなバグが出るかなと思ったらタッチ・スライド・ドラッグ＆ドロップが問題なく動いて感動しました。
GodTouchを使うにあたっては
`GodTouches.GodPhase.Cancel`
が発生した際にスマホで電話等が発生した場合用の対応ができる点でも有難かったです。

下記アニメーションGIFにて、タップエフェクトやボールの操作にこのGodTouchを使用しています。
![movieTest.gif](https://qiita-image-store.s3.amazonaws.com/0/150633/0302ec34-a8d9-9d22-76d8-d0464e6647b4.gif)
ついでに、タップエフェクトを表示するためのスクリプトはこんな感じになります。

```csharp:TouchEffect.cs
using UnityEngine;

public class TouchEffect : MonoBehaviour
{
    [SerializeField]
    private ParticleSystem TouchParticle;

    void Update()
    {
        var phase = GodTouches.GodTouch.GetPhase();
        if (phase == GodTouches.GodPhase.Began)
        {
            var TouchPosition = Camera.main.ScreenToWorldPoint(GodTouches.GodTouch.GetPosition()) + new Vector3(0, 0, 10);
            TouchParticle.transform.position = TouchPosition;
            TouchParticle.Emit(1);
        }
    }
}
```
テラシュールブログのタップエフェクトの記事のスクリプトと組み合わせて作成しております。
[【Unity】タップした位置にエフェクトを表示する - テラシュールブログ](http://tsubakit1.hateblo.jp/entry/2016/04/28/023104)
とりあえず、タップ・スライドしている箇所の座標を取得したい場合は、
`Camera.main.ScreenToWorldPoint(GodTouches.GodTouch.GetPosition())`
でOKってのを覚えておけば後は楽に実装できるかと思います。
##DOTween(無料・[有料の機能拡張版](https://www.assetstore.unity3d.com/en/#!/content/32416)あり)
[DOTween (HOTween v2) - アセットストア](http://tsubakit1.hateblo.jp/entry/2016/04/28/023104)
Tweenアセットといえばこれでしょうか。ボールが落下する時やボールとボールが繋がる（ように見える）所はDOTweenを使用しています。
![movieTest.gif](https://qiita-image-store.s3.amazonaws.com/0/150633/0302ec34-a8d9-9d22-76d8-d0464e6647b4.gif)
[渋谷ほととぎす通信](http://www.shibuya24.info/)さんの[DOTweenに関する記事](http://www.shibuya24.info/archive/category/DOTween)が参考になりました。
また、DOTweenには便利な遅延実行機能があります。
[渋谷ほととぎす通信 - DOTweenに用意されている遅延実行が便利](http://www.shibuya24.info/entry/2016/11/10/092000)
今回アプリ内で実装した遅延実行機能をほぼこの機能で実施いたしました。可読性も高く有難かったです。
##MaterialUI(有料・$50)
[MaterialUI - アセットストア](https://www.assetstore.unity3d.com/jp/#!/content/51870)
![materialUI.JPG](https://qiita-image-store.s3.amazonaws.com/0/150633/f6ebde06-90a2-e3b8-4edd-87d0acf75813.jpeg)
今回アプリを作成するにあたってやりたかったことは
「**僕の考えた新たな操作方法で○○○○がしたい！！**」
だったので、UI(ボタンやダイアログ等)については作る気がありませんでした。
何かフラットデザインなUIアセット（始めはフラットデザインで作成する予定だった）無いかなと探した所、これが良さそうということで、制作工数（時間）を短くできるならば金は支払うべきであるという信念の元購入しました。時は金なり。

MaterialUIを採用した結果、全体的なデザインもフラットデザイン→マテリアルデザインに変更しています。一蓮托生。

使い方については、アセット内のExampleと[youtubeのTutorial動画](https://www.youtube.com/channel/UC7GHoQn2iU_A4-5usuDQrCQ)で学びました。UI周りは本当にこのアセットで助かっています。
![CreditsDialog.gif](https://qiita-image-store.s3.amazonaws.com/0/150633/71357f30-ad37-0f11-3abc-196fb68a96ae.gif)
一例として挙げますが、上のアニメーションGIFで出現するダイアログは、下の関数をボタンクリック時に呼び出すだけです。

```csharp:
    public void OnCreditButtonClicked()
    {
        DialogManager.ShowAlert("This software includes the work that is distributed in the Apache License 2.0\n"
            + "(c) 2017 Ippei Kato",
        () => {}, "OK", "Credits", MaterialIconHelper.GetIcon(MaterialIconEnum.CREATE));
    }
```
有料で手が出ないけれどもちょっと使ってみたい、という場合には、旧バージョンにはなりますがGithubにありますのでこちらを試すことが出来ます。
[InvexGames/MaterialUI : MaterialUI is a UI kit for Unity that follows Google's official material design guidelines.](https://github.com/InvexGames/MaterialUI)
私は即購入したのでこっちはよく分かってない。
##Obfuscator(有料・$60)
[Obfuscator - アセットストア](https://www.assetstore.unity3d.com/jp/#!/content/48919)
![Obfuscator 0.png](https://qiita-image-store.s3.amazonaws.com/0/150633/70bd7d41-19e2-943d-8d28-8dda8a626fab.png)
難読化ツールです。これを使えば解読されなくなるわけではないけれども、これを使えば解読がとても面倒になるという感じ。
手軽にできない事象に手を出す人は少ないので、それだけでも効果はあると思っています。
とはいえ、これを使って良かったも悪かったもないわけで、安心を買ったという程度のことでもあります。
##GoogleMobileAdsPlugin(無料)
[スタートガイド | AdMob by Google](https://firebase.google.com/docs/admob/unity/start?hl=ja)
バナー広告やインタースティシャル広告を iOS や Android に配信するためのアセットです。

このAPIはiOS実装時に詰まりました。
[【Unity、iOS】AdMob入れたらModule 'GoogleMobileAds' not found.が消せなくて困った。 - naichi's lab](http://blog.naichilab.com/entry/admob-framework-not-found)
>Add Files to "Unity-iPhone"... でSDKを選択するウィンドウがある。
>そのウィンドウで`Options`を開き、`Copy items if needed`にチェックを入れること！！

**必ず`Copy items if needed`にチェックを入れてからAddボタンを押しましょう**（大切なことなので２回言った）
しかし、windowsでビルドしてXcodeに持っていく度にこれをやるのは面倒なわけで、上記方法でAddしたフォルダを
>unity側で `Plugins/iOS`に `GoogleMobileAds.framework`を放り込む。

MacOSで`Copy items if needed`にチェックを入れてからAddボタンを押して生成した`GoogleMobileAds.framework`フォルダを、`Plugins/iOS`に放り込んでください。
私の場合は製造しているPCがWindowsなので、一旦MacOSで生成した`GoogleMobileAds.framework`フォルダをwindowsにあるUnity Projectの`Plugins/iOS`に放り込みました。

##Unity IAP Store package 1.9(無料)
Unity公式の、コードを書かずにアプリ内課金ができるという優れもの。通信周りがコードレスというのは本当に助かる。
インストール～
[Unity : アプリ内ストアを最小限のスクリプトで実装する - いんでぃーづ](http://indie-du.com/entry/2017/01/05/200000)
####iOSテスト・実装時の注意点その１
[エイバースの中の人:Unityでコードを書かずにアプリ内課金が可能に](http://blog.livedoor.jp/abars/archives/52390809.html)
下記引用部に気づかなかったがためにiOSでアプリ配信開始が１０日ほど遅れてしまいました。
>どうやら、iTunes ConnectのConrtacts、Tax、Bankingを登録しないと、課金APIのテストはできないようです。

####iOSテスト・実装時の注意点その２
もう一つ詰まった点として、iOSの方で非消費型アイテムのリストア・復元機能の実装にありました。こちらの点についてはノーコーディングとは行かず、少量ではありますがコーディングいたしました。
[UnityIAP IAPボタンを用いた非消費型アイテムのリストア対応](http://qiita.com/feath/items/49b93f15eca5d9726c1b)

iOSはこれらの点で苦労しましたが、Androidに関しては本当にノーコーディングで行けたようなもので、昔を知らないですが楽で助かるなぁと感じております。
##Social Connector(無料)
[anchan828/social-connector : Social Connector](https://github.com/anchan828/social-connector)
シェアボタンの実装に使用しました。
基本は1フレ待ちで良いみたいですが、どうも前回撮った写真が表示されるので１秒待ってからShare機能を発呼するようにしています。
[[Social Connector] Unityで画像付きツイートができない時の対処 | クリアメモリ](https://clrmemory.com/unity/socialconnector-pic-error/)
##I2 Localization(有料：$48)
[I2 Localization - アセットストア](https://www.assetstore.unity3d.com/jp/#!/content/14884)
![I2_Localization.JPG](https://qiita-image-store.s3.amazonaws.com/0/150633/f6452b0f-b264-30e7-c556-009fea543103.jpeg)
多言語対応アセットになります。このアセットはアプリを配信してから追加機能として実装しました。
日本語のみだったアプリに、**わずか１週間**で英語・中国語(繁体字)・中国語(簡体字)を実装できました。
（※機械翻訳なので、全て正しい翻訳というわけではないです。）

このアセットがどれだけのことができるのかについては、下記URLの無駄に壮大なBGMのYoutubeにある紹介動画を見ると良いです。
[Trailer: I2 Localization For Unity UI, NGUI, TextMeshPro, DF-GUI - Youtube](https://www.youtube.com/watch?v=h27T3WFTOFE)

マニュアルはこちらになります。英語ですが、画像やアニメーションGIFを多用しており、かなり分かりやすく記載されています。
[I2LocalizationManual](http://inter-illusion.com/assets/I2LocalizationManual/I2LocalizationManual.html)

どうしても日本語が良い場合は、はまけんさんの使用方法について記載された記事を読みましょう。
[ハマケン100%開発:Unityアプリのローカライズ対応 I2 Localization その1](http://hamken100.blogspot.jp/2016/11/unity-i2-localization-1.html)

多言語対応機能として色々あるのですが、
- ワンタッチで翻訳
- Google Spread sheetと入出力管理が可能
- iOS・Androidの言語設定に応じた言語が自動で選択される。スクリプトでの選択も可能。
- 基本はLocalizeコンポーネントをTextコンポーネントと同じ箇所にアタッチして対応したKey名を設定するだけ。
- 言語に応じてFontの変更も可能。というか言語に応じてTextureやAudio Clip、GameObject等の変更もできる。
- Keyを設定すればスクリプト側からテキストデータの取得も可能。
他にも機能がありますが私が使用したのはこれくらいです。

スクリプト側から文字列を取得したい場合は、
`I2.Loc.ScriptLocalization.Get("キー名")`
スクリプト側から表示言語を変更したい場合は、
`LocalizationManager.CurrentLanguage = LanguageName;`
スクリプトを書く際はこれだけでも何とかなっちゃいます。
##最後に
以上でアセット紹介を終了します。
まだParticleが残っているといえば残っているのですが、無料のParticleを改造して使用しているという程度のものです。
今回はシミュレータアプリだったので、次は最低限ゲームとして機能するレベルのアプリを製造しようと邁進していこうと思います。
###制作したアプリ
ぷよぷよシミュレータのようなものです。
iOS:https://itunes.apple.com/jp/app/id1195565268
google play:https://play.google.com/store/apps/details?id=com.feath.FourLinksSimulator