Unityでアプリ開発する時に決めておくルール

#概要
Unityのバージョンは2018.4

Unityでアプリ開発する時に決めておくといいルールやUnityの設定についてのメモです。
あくまで開発時に気にしておくことのメモ（自分用）なので、各項目について詳しくは説明しません。

- Unityのバージョン
- Unityのデバッグモード設定
- フォルダ構成
- コーディングルール
- デバッグログ設定
- シーンの構成
- アニメーションの管理方法
- リソースの管理方法
- 使用するアセットの検討

#Unityのバージョン
長期サポートバージョンであるLTS版を使う（サポートは２年間）
https://jp.gamesindustry.biz/article/1808/18082403/
ダウンロードは以下から
https://unity3d.com/jp/unity/qa/lts-releases

#フォルダ構成

- Assets
    - StoreAssets（他のアセットなど）
        - 各アセット名でフォルダ分け
    - プロジェクト名フォルダ
        - Database（jsonやcsvファイルなど）
        - Editor（エディタ拡張）
        - Font（フォントデータ）
        - Plugins（プラグイン .dll）
        - Resources
            - Load（スクリプトで読み込むリソース）
            - Prefab
            - Texture
            - Audio
        - Common（いろんなシーンで使われるもの）
            - Texture
            - Animation
            - 各シーンでしか使わないものはシーン名でフォルダ分け
        - Scene
            - 各シーン名でフォルダ分け（このシーンでしか使わないファイルも入れる）
            - 用途（用途やファイルの種類によってさらにフォルダを分ける）
        - Script
            - 用途ごとにフォルダ分け
            - Util（全体でよく行う処理をまとめる）

参考ページ（基盤開発がよくまとめられている）
https://www.shibuya24.info/entry/sumzap_adventcal20191211

#コーディングルール
C#で開発するならMSDNのものを参考にチーム内でルールを決める
https://docs.microsoft.com/ja-jp/previous-versions/dotnet/netframework-3.5/ms229002(v=vs.90)?redirectedfrom=MSDN
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/inside-a-program/coding-conventions
https://qiita.com/hota1024/items/3e2f42125678be992646

コードをきれいに書く方法に関しては以下を参照
https://qiita.com/github129/items/4d1a5625d91edd0a0b77
https://qiita.com/NoriakiOshita/items/e60ab5bb01b90d927ae5


注意) 
名前空間やクラス名をつけるときはUnityで使用されている単語と被らないよう注意する（DebugやSystemなど）

##Unityのデバッグモード設定
デバッグ中は値を変更しても元に戻ってしまうので、デバッグ中であることをわかりやすくする
Editor > Preferences > Colors > Playmode tint の色をわかりやすい色に変更

その他覚えておくと便利な操作方法

- ScriptがアタッチされているObjectを検索 https://qiita.com/k-kurikuri/items/9c9781c8ef4f4b6c4e2c
- Sceneの画面で右クリックでHand Toolのショートカット
- Gameの画面のFree Aspectの ⊕ で表示解像度の追加ができる
- Window > General > Console でデバッグウィンドを表示
- Window > Analysis > Profiler でプロファイラーを表示


##デバッグログ設定
リリースビルドしたときにDebug.Log()を出力しないようにする

Build Settings > PlayerSettings > Other Settings > Logging を None にする
スクリプトで設定するなら Debug.logger.logEnabled = false;
https://docs.unity3d.com/ScriptReference/Logger-logEnabled.html

ログファイルの出力先 https://docs.unity3d.com/ja/current/Manual/LogFiles.html

開発ビルドを作ってデバッグ実行をするには
1. Build Settings > Copy PDB files と Devlopment Build と Script Debugging にチェックを入れる
2. アプリを実行して Visual Studio のデバッグを実行（リモート接続するにはUnityデバッガーのアタッチを変更する） 

##シーンの構成
シーンをどう管理するか決める

(1) シーンは１つのみにして配置するオブジェクトを切り替える方法

- メリット
    - シーン読み込みがないので画面遷移は高速
    - 読み込むオブジェクトが多いと最初の起動が遅い
- デメリット
  - 複数人で開発するとき注意が必要（シーン変更したときのGitのマージなど） 

(2) シーンを画面ごとに分ける

- メリット
  - 分割されているので複数人で開発しているときにコンクリフトがおきずらい
  - オブジェクトを管理しやすい
- デメリット
  - シーン切り替えごとに読み込み時間が入る
  - シーンをまたいで読み込みたいオブジェクトや変数は扱いが面倒になる

(3) データを管理するシーンを最初に読み込み階層ごとにシーンを管理する（UI、ステージなど）
 
- メリット
  - データやオブジェクトを管理しやすい
  - 複数人での開発もしやすい
- デメリット
  - シーンを重ねるので読み込みは発生する

(3)は1と2の間を取ってるような構成
開発するアプリによってどう管理するのがいいか検討する
（実際全部を試したわけではないので参考程度のメモ）

これらはパフォーマンスも考慮して決める（参考資料は以下）
https://forpro.unity3d.jp/unity_pro_tips/2019/09/02/223/#_Layout_Group
https://engineering.enish.jp/?p=1115
https://logmi.jp/tech/articles/320742
https://qiita.com/gremito/items/611879e94a9608b670f9

#アニメーションの管理方法
アニメーションで検討すること

- どうやってアニメーションを作るか
 - Unity標準の Animator を使用して管理する（Stateが多いと設定が面倒なので注意）
 - SimpleAnimation を使用する（Unityが提供しているアセットでStateの設定が不要）
 - アニメーションにTweenのアセットを使用する（[DOTween](https://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676)）

UIのアニメーションくらいなら SimpleAnimation のほうがやりやすい
キャラクターのアニメーション制御するなら Animator のほうがいいかも

参考になりそうなサイト
https://kan-kikuchi.hatenablog.com/entry/SimpleAnimation
https://logmi.jp/tech/articles/320183
http://tsubakit1.hateblo.jp/entry/2017/12/08/014153
https://light11.hatenadiary.com/entry/2019/06/04/003822
https://qiita.com/GREAT__SHARK/items/a6d47a6d953a14463cad

##リソースの管理方法
主にデザイナーが作るテクスチャファイルについて

- UnityはPhotoshopファイルが直接読み込めるのでそのままで管理するのがいいかも
    - だたしWinMergeで差分見るには画像ファイルじゃないとだめ
- パフォーマンスに影響してくるので１枚の画像に複数のSpriteを管理する
    - Unity標準でSpritePackerというのがある http://tsubakit1.hateblo.jp/entry/2017/05/04/233000
    - UIのボタンなどはMultipleモードにして１つのデザインでいろんなサイズのボタンが作れる
- PhotoShopファイルをレイヤーを分割して読み込んでくれるアセットなどもあるので検討
    - http://tsubakit1.hateblo.jp/entry/2018/12/18/200751

注意）
テクスチャの管理方法に関してはよくデザイナーと話して決める（デザイナーがUnityを使ったことがあるかも割と重要）

##使用するアセットの検討
使用するアセットによっては開発が楽になるので、便利なアセットは積極的に使っていく
ただし使う前にライセンスやOSSは問題ないか調査すること
https://dkrevel.com/unity-explain/unity-asset-store-important-point/

参考ページ
http://www.asset-sale.net/entry/Modern_UI_Pack_Dynamic_Panels180408
http://appneets.blog.jp/archives/1062712197.html
https://qiita.com/tempura/items/856e369d3e953e5829e6#%E3%83%AA%E3%83%B3%E3%82%AF
https://qiita.com/jhorikawa_err/items/410ecdc1addd04201fbf
https://qiita.com/ayumegu/items/755c648247925357aa17