この記事はVRChat Advent Calendar 2018の17日目の記事になります。
昨日の記事はじぇしか(@jscmla1118)さんによる、「VRChatと外部世界を繋ぐインターフェース」でした。
はじめに
元々エンジニアとしてGitを使っていた私が、VRChatのアバターやワールドをGit管理するようになって便利だったので、今回はVRChat用のUnityプロジェクトをGit管理する方法や注意点について書いていきたいと思います。
そもそもGitとは?
こちらに書かれている用に、分散バージョン管理システムというものですが、簡単に書くと、作っているものの途中過程を随時記録して管理できるシステムのことです。
作っているものの状態はリポジトリというデータベースに保存されていきます。
また、ファイルをリポジトリに記録させる事をコミットすると言います。
Gitでプロジェクト管理することの利点
作っているものの過程を随時記録できるので簡単にプロジェクトのバックアップをとることができます
そして、リモートリポジトリを利用すれば、インターネットのサーバー上にバックアップをアップロードして管理することも簡単にできてしまします。
また、過程が別々に保存されているので、過去のある時点で作ったものを取り出すといったこともできます。
他にも、ブランチという機能を使ってそれまでに作ったものを残したまま別バージョンのものを作ることもできます。
VRChatのプロジェクトをGit管理する時の注意点
VRChatのプロジェクトの中には購入した3Dモデルなどを含めている人が多いと思います。
こういったプロジェクトをローカルのリポジトリで管理している分には問題ないのですが、リモートリポジトリにアップロードする際の設定としてpublicなプロジェクトとして管理しないようにしてください。
publicなプロジェクトとして管理してしまうと、他の人がそのプロジェクトをコピーできてしまうため、多くの販売アバターの利用規約にある再配布禁止の規約に違反してしまう恐れがあります。
また、そうでなくとも勝手に自分の作っているものをコピーされる事がありますので、VRChatのプロジェクトはprivateで管理するようにした方がいいと思います。
しかし、リモートリポジトリのホストとして有名な GitHub は privateリポジトリは有料で提供されています。 (学生であれば2年間は無料で使えます 詳しくはこちら)
(2019年10月1日追記) 現在はGithubのプライベートリポジトリも無料で使えるようになっています。
Bitbucket というリモートリポジトリのホストサイトではprivateリポジトリが無料で使用できるので、個人的にはこちらがおすすめです。 (以下のチュートリアルでもこちらを使っています)
もう一つの注意点として、VRChatのプロジェクトにはモデル、テクスチャ等の容量の大きいファイルが多く含まれています。
容量の大きいプロジェクトは最終的に操作に数十分かかるようになったり、リモートリポジトリの容量制限に引っかかってしまうことがあります。
目安としては、プロジェクトの Assets
フォルダの容量が 500~600MB
ほどのプロジェクトが限界かと思います。
巨大なプロジェクトは GitLFS というサービスを利用して管理したり、完全にローカルで管理するようにした方がいいでしょう。
実際にやってみよう!
では、実際にGitを使ってプロジェクトを管理してみたいと思います。
SourceTreeのインストール
Gitを使う場合、コマンドライン(Windowsでいうコマンドプロンプトなど)上から使う方法と、GUIのソフトウェアから使う方法の2種類の使い方があります。
前者は素早く操作できるものの、コマンドラインの入力に慣れていなかったり、コマンドを覚えて入力する必要があり最初は大変なので、今回は直感的に操作できる後者のソフトウェアを使っていきたいと思います。
今回使用する「SourceTree」は、後者のGitクライアントソフトのひとつです。
詳しいダウンロードやインストール方法については こちら のサイトを参考に行ってみてください。
Unityプロジェクトの事前準備
Gitで管理しないファイルを設定する
Unityのプロジェクトにはアセットから生成された Unity 内部の形式のデータをLibrary
フォルダに保存していますが、このLibrary
フォルダの容量がめちゃくちゃでかいです。
また、Unityのプロジェクトを開く際にこのLibrary
フォルダは自動生成されるため、Gitで管理しないように設定してしまった方がいいです。
他にもGitで管理しなくていいファイルがいくつかあるため、そういったGitで管理しないファイルの情報をまとめた.gitignore
というファイルを作成する必要があります。
Githubのgitignoreテンプレートunity版が以下のようになっていますので、まずは適当なテキストエディタ(メモ帳など)に以下の設定をコピペしてUnityプロジェクトフォルダのすぐ下に.gitignore
というファイルを作成してみてください。
(追記) Githubのgitignoreテンプレートだと一部のマテリアル設定がはがれてしまうという報告をいただいたので修正したものを以下に記載しています。
/[Ll]ibrary/*
!/[Ll]ibrary/metadata
!/[Ll]ibrary/assetDatabase3
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
/[Uu]ser[Ss]ettings/
# MemoryCaptures can get excessive in size.
# They also could contain extremely sensitive data
/[Mm]emoryCaptures/
# Asset meta data should only be ignored when the corresponding asset is also ignored
!/[Aa]ssets/**/*.meta
# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*
# Autogenerated Jetbrains Rider plugin
/[Aa]ssets/Plugins/Editor/JetBrains*
# Visual Studio cache directory
.vs/
# Gradle cache directory
.gradle/
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db
# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta
# Unity3D Generated File On Crash Reports
sysinfo.txt
# Builds
*.apk
*.aab
*.unitypackage
# Crashlytics generated file
Assets/StreamingAssets/crashlytics-build.properties
# Packed Addressables
/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin*
# Temporary auto-generated Android Assets
/[Aa]ssets/[Ss]treamingAssets/aa.meta
/[Aa]ssets/[Ss]treamingAssets/aa/*
Unityの設定
次にUnityプロジェクト側の設定を変更します。
管理したいプロジェクトをUnityで開き、メニューバーのEdit
からProject Settings -> Editor
を開きます。
するとInspector
にEditor Settings
が出てくるので、その中のVersion Control
とAsset Serialization
の項目を以下のように設定します。
これでプロジェクトをGitで管理する準備は完了です。
リポジトリの作成
それではSourceTreeを起動してみてください。
最初はこのような画面になっていると思うので、まず上のCreateボタンを押します。
するとリポジトリを作成する画面が出てくるので、参照ボタンから管理したいプロジェクトのフォルダを指定して作成ボタンを押します。
このような画面が出てくるかもしれませんが、はいをクリック。
すると、このような画面がでてきます。これでリポジトリの作成は完了です。
プロジェクトをGit管理下に置く
画面の作業ツリーのファイルの横にある全てインデックスに追加
ボタンを押すと、ファイルをGit管理する準備が整います。
そして、ファイルをGit管理下に置く(コミットする)前にコミットメッセージというのを書きます。
このコミットメッセージというのは後で自分が見返した時に、どんな変更を加えたのかというのを把握するために書くものです。
自分の名前の下の空欄にコミットメッセージを追加してコミットボタンを押します。
すると、左のブランチタブにmaster
という名前が追加されます。
これでプロジェクトがGitで管理されるようになりました。
Bitbucket にアップロードしてみる
では、このプロジェクトをBitbucketのリモートリポジトリにアップロードしてみましょう。
ブラウザで https://bitbucket.org/product を開きます。
右上の log in をクリックするとSource treeのインストール時に登録したAtlassianのアカウントが求められますのでAtlassianアカウントでログインします。
すると、下のような画面になります。
左のプラスボタンを押してCREATEメニューからリポジトリを選択します。
リポジトリ名を入力し、これは非公開リポジトリですにチェックがついていることと、バージョン管理システムのラジオボタンにGitが選択されていることを確認してリポジトリの作成ボタンを押します。
すると上のような画面に切り替わるので、赤枠で囲まれた部分をコピーします。
SourceTreeの方に戻り、右上のターミナルボタンを押します。
上のようなコマンドラインの画面が出てくるので、ここに先程コピーしたコマンドを貼り付けてEnterを押します。
SourceTreeに戻り、上のプッシュボタンを押すと以下のような画面になるので対象の下のチェックボックスにチェックを入れてプッシュボタンを押します。
ブラウザの先程のページを更新して以下のようにプロジェクトファイルが見えるようになっていれば完了です。
プロジェクトの更新
プロジェクトの更新方法についても説明します。
Unity上で変更を加えた後にSourcetreeのブランチタブのmasterを開くとこのように表示されますのでこの変更をコミットしていきましょう。
ファイルステータスタブの作業コピーに移動すると変更のあったファイルが表示されるので全てインデックスに追加
ボタンを押します。
これでコミット準備ができたのでコミットメッセージを書いてコミットしましよう。
ここで、左下の変更をすぐにorigin/masterにプッシュするチェックボックスにチェックをしておくと、コミットが自動的にリモートリポジトリにも反映されるようになります。
ブランチ->masterに戻ると変更が反映されているのが分かると思います。
リモートリポジトリにも反映させた場合はプロジェクトのリモートリポジトリページのコミットを見ると変更が反映されてるのが分かると思います。
これでプロジェクトの更新をGitへ反映させる作業は完了です。
終わりに
ここまでGitを使ってプロジェクトを管理し、リモートリポジトリへのアップロード、プロジェクトの更新の反映までを記載しましたが、Gitにはまだまだ沢山の機能があります。(私も全部把握できてないです)
他の機能やこういう時はどうするの?というTipsについては他のQiitaの記事や色んなWebサイトに載っていますので必要になったら調べてみるといいでしょう。
また、Gitに関する質問は私の方でも受け付けていますので質問のある方はTwitter @sansuke05_vr の方まで連絡いただければ、分かる範囲でお答えします。
この記事をきっかけに少しでもGitを使う人が増えてもらえれば幸いです。