## Unityで作ったアプリに ## 実装/使用した各種機能 [@tyfkda](https://tyfkda.github.io) Feb 19, 2017 [wnpkpg](https://atnd.org/groups/wnpkpg) [#30](https://atnd.org/events/85150)
## 項目 * オーディオ * トゥイーン * スクロールスナップ * シーン遷移アニメ * 操作ブロッカー * バックキー * シェアの終了検知 * 時刻 * ローカル通知 * ローカライズ
## オーディオ * 鳴らす`AudioSource`を`GameObject`に追加しておく、とかメンドイ * (2Dゲームで3Dサウンドは使わないので)チャンネル数分`AudioSource`を作成しておいて、チャンネル指定でどの音を鳴らすか指示
## トゥイーン * 時間経過で位置や色などをスムーズに補間 * [Uween](https://github.com/oinkgms/uween) * [Unity 用の超シンプルなトゥイーンエンジン Uween を作りました - Studio \| Oink Games](http://studio.oinkgms.com/post/104638530947) * そのままだとUGUIだけが対象 * `Sprite`のカラーなどの属性を対象にしたい場合には、継承して`value`の`get`と`set`を実装
## スクロールスナップ * スワイプで離した時に慣性つきのスクロールさせつつ、最終的な位置はグリッド単位に停止させたい * スワイプ時は[ScrollRect](https://docs.unity3d.com/ja/current/Manual/script-ScrollRect.html)の[inertia](https://docs.unity3d.com/ja/current/ScriptReference/UI.ScrollRect-inertia.html)を`true`にして、速度を計算させる * 離された時に`false`にして自前計算に切り替える * [JavaScript Kinetic Scrolling: Part 1 · ariya.io](https://ariya.io/2013/08/javascript-kinetic-scrolling-part-1) * 初速と減速係数から停止位置をあらかじめ計算し、速度が一定以下になったらスナップ動作に切り替え
## シーン遷移アニメ * [SceneManager.LoadScene](https://docs.unity3d.com/ja/current/ScriptReference/SceneManagement.SceneManager.LoadScene.html) を呼び出すと画面が一瞬で切り替わってしまう * [【Unity】Unityでトランジションを使用した綺麗な場面転換(uGUI対応版) - テラシュールブログ](http://tsubakit1.hateblo.jp/entry/2015/11/04/015355) * マスクテクスチャでアニメーションを指定 ![transition](flapper/transition.png)
## 操作ブロッカー * 遷移中に他のボタンが反応してしまうとバグの元 * 全てのボタンを無効にするとかメンドイ… * 全画面を覆う`Image`をほぼ透明で配置するとフィルがかかるよね…? * 描画しないUI: http://answers.unity3d.com/answers/1157876/view.html
## バックキー * Android: いつでも押せて、前の画面に戻れる * `Input.GetKeyUp(KeyCode.Escape)` を見張る * スタック状に状態を管理する
## シェアの終了検知 * ゲームの画像や文章をSNSなどにポスト * [SocialWorker](http://okamura0510.jp/%E9%96%8B%E7%99%BA%E3%83%96%E3%83%AD%E3%82%B0/socialworker/) * 終了を検知して自動的に復帰させたい * 「投稿」「キャンセル」された時にコールバックさせるようにプラグインを修正
## 時刻 * ログインボーナス * 本体の時刻は改変される恐れ * ネットワークから取得 (NTP) * アプリが非アクティブから復帰したら取り直し
## ローカル通知 * 次のログインボーナス時になったら通知 * iOS: [NotificationServices](https://docs.unity3d.com/ja/current/ScriptReference/iOS.NotificationServices.html) * Android: プラグインを作って対処 * 確認ダイアログ
## ローカライズ * 言語ごとに翻訳した文章を表示 * 画面上の表示物は実行時に * ビルド時に対処が必要な項目: * アプリ名: * iOS: `InfoPlist.strings`の`CFBundleDisplayName` * Android: `Assets/Plugins/Android/res/values-xx/strings.xml`の`name="app_name"` * シェア時の「画像に保存」用の許可メッセージ: * iOS: `NSPhotoLibraryUsageDescription`