バージョン管理のないUnityプロジェクトがあり、プロジェクトで作業できるように別の開発者と共有する必要があります。
Unity Assetsでうまく機能する戦略は何ですか?
バージョン管理のないUnityプロジェクトがあり、プロジェクトで作業できるように別の開発者と共有する必要があります。
Unity Assetsでうまく機能する戦略は何ですか?
回答:
Unityには、バージョン管理を適切にサポートするための機能が組み込まれています。
「ファイル」->「プロジェクト設定」->「エディター」に進み、外部バージョン管理を有効にします。
Gitを使用することをお勧めします。Gitは無料で最適です。
しばらく前に、ブログでバージョン管理(Gitを使用)について書きました
長い話:
外部バージョン管理を有効にしますファイル->プロジェクト設定->エディターそして、レポジトリに不要なものを避けるために.gitignoreファイルを作成します(これは本当に必要ではありませんが、開発中は高価になります)。
ファイルは次のようになります。
[Oo]bj/
[Tt]emp/
[Ll]ibrary
#These are files in the root folder of the project
*.tmproj
*.csproj
*.unityproj
*.sln
*.suo
*.user
*.pidb
*.userprefs
.gitingore
ユニティ・プロジェクトのためのIの使用が、いくつかのommissionsと:[Bb]uild/
、*.booproj
、sysinfo.txt
。私が使用しているものは、Unity用のGitHubの新しいレポテンプレート(github.com/github/gitignore/blob/master/Unity.gitignore)に基づいていると確信しています(iOSを対象とする場合)。
Unity固有-常に異なるシーンと異なるコードファイルで作業し、他の人の変更を手動でマージします。両方が同じシーンで作業する必要がある場合は、複製してテストとしてコピーを使用します。それ以外の場合、両方が同じシーンを変更すると、一方の人の変更が他方を上書きします。ソースファイルにソース管理を使用することはできますが、作成後はファイルシステム内またはUnity経由で移動しないでください。
初心者のアドバイス-適切なdiff / mergeツール(私はWinMergeが好きです)を入手し、それを使用して他の人が行った変更を確認し、競合するファイルの変更を手動でマージします。中央のドキュメントスペースをセットアップします。Google執筆ドキュメントまたはWiki、およびドキュメントをそこに保管します-ドキュメントには、最低限、基本的な機能リストを含めて、目的を把握し、理想的には機能リストから派生したタスクリストと明確な指示を含める必要があります誰がタスクに取り組んでいるのか。お互いに話し合い、だれがどのタスクに取り組む必要があるかについて大まかな考えをつかみ、完了したらリストから外します。リストを再検討して再評価し、すべてがまだ有効かどうか、優先順位を変更する必要があるかどうかを確認してください。
私は、Defective Studiosと呼ばれるチームと協力しています。私たちは何年も同じ問題に苦労してきましたが、つい最近、ついにやってきて、ゲームオブジェクトのマージを支援する拡張機能を書き始めました。
基本的に、アプローチは、各ゲームオブジェクト、コンポーネント、およびプロパティを並べて比較するウィンドウにインスペクターのようなインターフェイスを作成し、値(またはオブジェクト全体)を一方から他方にコピーするボタンを提供します。SerializedProperty
クラスに精通している場合、ここで作業の大部分を行っています。私たちは、基本的には、左右の側との間で折りたたみ式の状態を同期化するGUIを作成し、垂直方向のスペースを作成し、どこGameObject
かComponent
右側または左側にのみ存在します。比較関数は、各レベルで平等をチェックし、平等の状態に応じて各行の背景を赤または緑に変えます。子に違いが含まれる行も赤になります。また、ツリーを再帰的に検索し、子が異なるまたは違いがあるすべてのオブジェクトを展開するための気の利いたボタンも含まれています。
同様に、特定のコンポーネントタイプを比較から除外できるマスクフィールドのセットがあります。名前、レイヤー、タグなどのGameObject属性も比較されます。とを使用SerializedObject
しSerializedProperty
てgameObject
のプロパティをループし、インスペクターで描画されるように描画します。これにより一貫性が確保され、コーディングが非常に簡単になります!
最後の気の利いた詳細の1つは、比較プロセス(オブジェクトが読み込まれ、変更が行われるたびにトリガーされる)が、EditorWindow.Update
関数によって更新されるアドホックコルーチンで実行されることです。そのため、非常に複雑なオブジェクトを比較する場合、ウィンドウはエディターをロックしません。これは、オブジェクトを数百(または千!)の子供と比較する場合に必須でした。全体として、それは私の友人が言うのを好む「レゴプロジェクト」のようなものでしたが、間違いなく私たちのコラボレーションワークフローの一部となった非常に貴重なツールです。
ツールであるUnity MergeはUnify wikiに文書化されています。これには、フィードバックと問題の報告のためのロードマップと電子メールアドレスが含まれています。複雑なマージに本当に苦労しているなら、それを試してみて、あなたの考えを教えてください!また、私はそれをDLLに組み込むことを気にしませんでしたので、ソースを自由に調べてください。アドホックコルーチンの実装とSerializedProperty
操作、および私が必要とするいくつかのGUIトリックは、エディター拡張ツールキットの大部分です。ユーザーが持つ可能性のある変更/改善に非常に興味があるので、連絡してください!
資金があれば、プロ版のUnityを備えたAssetサーバーはかなりまともです。私は過去に大規模な複数人プロジェクトでそれを使用し、それは仕事をしました。バニラのバージョン管理については、期待どおりの動作をしました。
UnityプロジェクトでSVNリポジトリを使用してみましたが、少し面倒でした。しかし、アイデアを機能させる前に、アイデアを廃棄しました。Unityは多くのバックアップファイルを保持していますが、それらをサーバーに同期しなかった場合に何が起こるかを調べるのに時間をかけたくありませんでした。ちょっとしたフィネスで、それは実行可能かもしれませんが、うまく機能する経験はありませんでした。
DropBoxの無料機能を使用して小さなプロジェクトを作成しました。緊張しましたが、問題はありませんでした。そして、そのプロジェクトに実際のバージョン管理機能が必要になったとは思わないので、ファイルのリバートやマージがどのように行われるかについてはあまり話すことができません。
Dropboxは(コミットごとではなく)ファイルごとのバージョン管理をサポートし、Unityでうまく動作します。最初は無料(2ギガバイト)で、その後はかなり安い(50ギガバイトで約10ドル)。バージョン履歴にアクセスするには、PackRatアドオンが必要です。
SVN、CVS、GITなどと同様に、開発の主要な各段階(たとえば、週末、マイルストーンの終わり)に到達したときにタグフォルダーを作成する必要があります。前述とは異なり、そうしないとそのような段階に戻すことははるかに難しくなります。なぜなら、すべてのファイルを個別に元に戻す必要があるからです。開発中はこの点に留意してください。AssetServerに費用を支払うことなく簡単に時間を過ごすことができます。