新規Unityプロジェクトでの開発環境ドキュメント作成

毎回新規プロジェクトに入る際にWikiやドキュメントを残す際に同じようなことをするのでメモとして残す資料です。
基本的にMarkDown記法で残しています。(例)は状況によって変える行を表しています。(x/y/z)はどれかを選択

環境設定(configuration)

環境設定では、ビルドするために必要な要素を記述します。

# UnityVersion

Unity 2019.3.0f3(例)

https://unity3d.com/jp/unity/qa/lts-releases?version=2019.3(例)

# Unity設定項目

(2D/3D/HDRP/URP)プロジェクト用設定で作成

2D/3Dモード設定による違いはこちら
https://docs.unity3d.com/ja/2018.1/Manual/2DAnd3DModeSettings.html

HDRP(ハイダイナミックレンジレンダリングパイプライン)
https://blogs.unity3d.com/jp/2018/03/16/the-high-definition-render-pipeline-focused-on-visual-quality/

URP(ユニバーサルレンダリングパイプライン.旧軽量レンダリングパイプラインLWRP)
https://blogs.unity3d.com/jp/2019/09/20/how-the-lightweight-render-pipeline-is-evolving/

Android OS : Minimum Version : 7.0(例)

iOS : Minimum Version : 11.0(例)

Android,iOSともにIL2CPP

# 環境構築

CPU : 
GPU : 
MEM : 
SSD容量 : プロジェクトのサイズ+Unity+AndroidSDK+AndroidNDK+JDK+XCodeが必要になるので最低でも30GB以上は空き容量が必要になります。
     Unityのバージョンを複数用意して同プロジェクトを多数落とす場合は数にもよりますが、50GB以上は空き容量が必要です。

# iOS最低スペック端末

iOSのほうがメモリ管理は優秀ですが、その分メモリが少ない端末が多い印象です。
そのため、iOSではメモリ不足によるアプリ終了に気をつける必要があります。

沢山の人に遊んでいただきたいのであれば公開日から逆算して3年前に新規販売されたiPhone(一番性能低い)をベースにすればいいと思います。

# Android最低スペック端末

Androidのほうがメモリは多い端末が多いです。
しかし、CPU/GPUがiOSより低い場合が多いので、描画負荷や計算負荷によるFPS低減に気をつける必要があります。

沢山のに遊んでいただきたいのであれば公開日から逆算して3年前に新規販売されたSIMフリー端末(売上1位)をベースにすればいいと思います。

# Unity-環境構築手順書

UnityでGitHubなどから落としたあとの環境構築手順
(なければいらない。
あると長くなりがちなので別ドキュメントで作ってリンクを貼るといい)

# Unity-ビルド手順書

Unityでaab,ipaをビルドする手順(長くなりがちなので別ドキュメントで作ってリンクを貼るといい)

# その他注意事項

UnityはUnityで開発したゲームで収益が出るようになった場合は以下の制約があります。
過去12か月の収益または資金が10万ドル未満 : Free
過去12か月の収益または資金が20万ドル未満 : Plus($月35)
過去12か月で収益または資金が20万ドルを超える場合 : Pro(月$125)
個人事業主でも1000万(為替によりますがだいたい)の収益を得る方は月3500円は経費として出さないとライセンス違反です。
その他、UnrealEngineは $3,000 を超える部分にロイヤリティとして5%の支払いが発生します。

Gitクライアント設定

SVN,Mercurialなどでも環境構築する必要がある場合は手順を残しておきます。

# Gitクライアントインストール手順書

## windowsでgitコマンドが必要な場合
https://gitforwindows.org/

## GUI install
https://git-fork.com/

## 改行コード指定
Windows版でデフォルト設定をしてGitを入れると改行コードがMac/Linuxと違います。
私は改行コードはMac/LinuxのLF派と違いCRLF派なので、autoCRLFはfalseにしてCRLFで統一します。
(インポートライブラリなどはそのルールに従いません)
git config --global core.autoCRLF false

## git ignore
基本的にGitHubでUnityProjectを作った際に作られるgitignoreをベースに改良します。
以下の設定です。
[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
Assets/AssetStoreTools*

# Visual Studio cache directory
.vs/

# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.opendb

# Unity3D generated meta files
*.pidb.meta
*.pdb.meta

# Unity3D Generated File On Crash Reports
sysinfo.txt

# Builds
*.apk

通信API

通信周りのAPIを記述します。
基本的にサーバエンジニアの仕事ですが、サーバエンジニアがまだアサインされていない場合に
こんなAPIでこんな値が帰ってきたら実装できる、という記述を書いておきます。
RESTful形式でする場合もあれば POST 形式のみでする場合もありますが、まあ企業によって好みが分かれるところなので
どんなAPI名でどんなパラメータが帰ってきて欲しいかをJSONで書いておけばまあ問題ないでしょう。

API
/userinfo/get
Response
{
    {
        "name": "Tanaka",
        "age": 102
    }
}
...

ライセンス

全て個人で開発している、のであればライセンス表記は必要ありませんが、
このご時世、エンジンやアセットを使用していない方は多くないでしょう。
そのため、以下のような形で用意します。

# MITライセンス
UniRx(https://github.com/neuecc/UniRx)

# Apache 2.0 ライセンス
Firebase FCM (https://firebase.google.com/docs/unity/setup/)

# フォントライセンス
フリーソフトウエア
http://jikasei.me/font/rounded-mplus/license.html

# 自作ライブラリ

# Unityライセンス
TextMeshPro
DOTween

UnityのAssetStoreでライセンス表記されていないものはすべてこちらです。

http://assetstore.info/howto/howto-point/#point4

■改変FAQ

「サービス類のSDKは改変NG」

「上記以外は自由に改変OK」

■配布FAQ

「アセットが簡単に取り出せる形態での配布はNG」

「ビルドしたアプリとかは配布OK」

※MITなどのOpen Source系のライセンスを踏襲するものやCC-BY-SAを主張するものがありますが、

それらはカートに入れる際にその旨を示す画面がポップアップして判るようになっています。

# その他ライセンス
Android SDK
https://developer.android.com/studio/terms?hl=ja

Android NDK
https://developer.android.com/license?hl=ja

Unity初学者用リンク

開発する会社によってはUnity未経験な会社があったりしますので、
初学者用に見てほしいリンクを貼ります。

# まずはここを見ましょう
## Unityユーザマニュアル
https://docs.unity3d.com/ja/2019.3/Manual/UnityManual.html(例)

## Unityスクリプトリファレンス
https://docs.unity3d.com/2019.3/Documentation/ScriptReference/(例)
https://docs.unity3d.com/ja/2019.3/ScriptReference/(例)

日本語だと意味不明な箇所は英語で見ましょう。そのほうがわかりやすい場合もあります。

## Stack Overflow
https://stackoverflow.com/
いろいろな国の人が何をどうすればいいのかQ&Aしているサイトです。
リファレンスを読んでも分からないことがあったらここを調べてみましょう。

## Unity Forum
https://forum.unity.com/
バグがあったら細かい状況(再現出来るプロジェクトの用意など)を記述してUnity社に対応を祈る場です。
声(Votesやスレッドの勢い)が大きいと対処が早くなるかも。

## Unity助け合い所
https://www.facebook.com/groups/unityuserj/
Unity4か5頃から作られた場所です。
とても古くから一般ユーザの質問に答えているので検索すれば答えが乗っているかも。

## テラシュールブログ
http://tsubakit1.hateblo.jp/
細かい部分まで調査し記述してくれています。
Unity社員の方なので

## kanのメモ帳
http://kan-kikuchi.hatenablog.com/
Unityのアセットを沢山使用されている個人開発者のブログです。
色々なアセットを購入されているのでアセット名で検索するとよく出てきます。
アセットの使い方などに困ったら一読してみるといいかもしれません。

## uGUI
http://www.metalbrage.com/UnityTutorials/uGUI/index.html

iPhone/Android端末のノッチ対応に関して
SafeArea対応がなされた場合のuGUIの処理について記述(例)

## Unityのソースを見る
https://github.com/Unity-Technologies/UnityCsReference
UnityのC#ソースは上記から見れます。
C++側の処理を見ないと対処できない場合は
ゴリゴリのスーパーエンジニアだと思いますので、
Pro(月額125$) + Source Code Access(+????$)プランを選択するか
全てオープンなUnrealEngine(ただしハイスペックマシンが必要です…)をおすすめします。

Unityコーディング規約、命名ルール

## SerializedFieldのWarning削除
[SerializedField] private ClassA classA; // この場合にInspector上から値を入れ込んだ場合でも参照が無いということでWarningが出ます
[SerializedField] private ClassA classA = default; // こう書いとくとWarningを消せます。またInspector上から値を入れ込んだ場合は上書きされるため問題ありません。

## 命名規約
クラス名はclass HogeHoge_FugaFuga のパスカル形式+スネークケース(例)
メンバ変数は_hogeHoge_fugaFuga,引数やローカル変数はhogeHoge_fugaFugaのCaml形式+スネークケース(例)
define や const な値は HOGEHOGE_FUGAFUGA のUPPERCASE+スネークケース(例)
enum のオブジェクト名は eHOGEHOGE_FUGAFUGA のe+UPPERCASE+スネークケース(例)
enum HOGEHOGE_FUGAFUGA の列挙氏はUPPERCASE+スネークケース(例)
(例)※個人的には、細かく決めても守って貰わなければ意味がないわけで、
コーディング規約チェッカーなどを入れて対処するとか、プルリクのときに弾くとかでもいいですが
あんまりここにコスト割いてもなぁと思ってます。

## コーディング規約
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/inside-a-program/coding-conventions(例)
まあちょっとは読んでおいてねくらいです。(例)

## Unity特有の命名ルール
[SerializeField]やpublic属性でInspector上からオブジェクトをアタッチする場合(例)
### Prefabをアタッチする場合
Prefabを使用し、Instantiateして使い回す場合は他GameObject参照と違うということを認識してもらうため命名にPrefabを最後につけます。(例)
ScriptableObjectなどがほぼ持つことでしょう。
public GameObject _hogeHogePrefab(例)

### ScriptableObject
ScriptableObjectということを明記するため、命名にScriptableObjectを最後につけてください。(例)
public HogeHogeScriptableObject_hogeHogeScriptableObject(例)

### csc.rspの扱い
csc.rspで定義してあるものはデバッグ版でのみ必要な定義のみとする(例)

### Common.cs
汎用定義周りはココに記述(長くなったらpartialで区切る)(例)

Unity-クライアント実装思想

(例)
基本はパッシブビューMVPパターンを採用します。
その用途に応じて命名を以下のようにしてください。
M : ModelはxxxModel
V : Viewの命名規約はUnityの命名規約に準拠してください
P : PresenterはxxxPresenter

ローカル保存データに関して

サーバで保存するデータはサーバエンジニアに任せるとして、
ローカルで保存するデータに関してもドキュメントとして残しましょう。
また、 ローカルで保存するデータ へのアクセス手段、データの閲覧方法も記述しておくと安全です。

AssetBundleの運用に関して

AssetBundleを使用する場合。
AssetBundleの運用方法、
Addressable Assets Systemの使用に関して、
ScriptableBuildPipelineの使用 、
ResourceManagerの使用 、 に関して。
また、運用ドキュメントの作成(作成・保存先)

画面仕様

本来はディレクターとデザイナーが用意すべきものですが、
画面仕様が存在しない場合は自分のためにも作らざるをえません。
また、 画面仕様 に機能を記述しておくとデバッガさんに渡すときに理解されやすいです。

Unityビルド手順書

ビルドに関しては相手側の会社が新人に任せるかもしれないので、とにかく丁寧に記述します。

# Unityでaab,ipaをビルドするにあたり覚えるべきこと

・ UnityのインストールはUnityHubにしましょう
→ バージョン管理が楽です

・ Unityビュー名を覚える

・ SceneとPrefabの概念を覚える

・ uGUIの操作方法を覚える

・ ビルド手順を覚える

・ アセットバンドル作成手順を覚える

# ビルドする際の注意点

本番環境の場合はcsc.rspを削除しましょう(例)

# iOSビルド手順

画像を沢山使用してどこをどうすれば作成でき、どのようなデータをどんな相手に渡せばいいか具体的に記述します(例)

# Androidビルド手順

画像を沢山使用してどこをどうすれば作成でき、どのようなデータをどんな相手に渡せばいいか具体的に記述します(例)

# JenkinsやUnityCloudBuildでビルドする場合

どのURLでJenkinsを動作させているか、UnityCloudBuildは個人的にはあまりお勧めしない。

その他プロジェクト専用用語集

そのプロジェクトでしか扱わないような用語をまとめたTipsです。

ひとまずは以上がWikiに記述する内容です。

error

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください