Unity用のパッケージマネージャーであるProjenyを使ってUnityのプロジェクトを作ります。
目次
- 目次
- 作るプロジェクトの方針
- 前提条件
- 共有部分の作成
- Projenyプロジェクトの作成
- 作成したプロジェクトの使い方
- Asset Storeのアセットの利用
- 組み込んだアセットの削除方法
- GitHubなどで公開にする時の設定
- まとめ
- 参考URL
作るプロジェクトの方針
Projenyは複数のUnityのプロジェクトをまとめて扱えます。しかし、Gitなどでバージョン管理することを考えると、1つのProjenyプロジェクトに全てのUnityのプロジェクトを放り込むより、プロジェクトごとにProjenyプロジェクトを作成して、まとめてGitで管理した方が楽そうです。Asset Storeや共有するパッケージは、全てのProjenyプロジェクトから参照できる場所に配置します。
以下のような4階層にします。
どこを共有するのか、プロジェクトとして分けるのか、Gitで管理できるかなどを考えると、こんな感じかなという提案です。赤の部分は、一度作成したら、他のプロジェクトでも共有するものです。それ以外の3つは、プロジェクトごとに作成するのが良さそうだと考えています。
Projenyプロジェクトのフォルダー以下には、Asset Storeのアセットなどは含まないような構成なので、MITライセンスなどのプロジェクトならGitHubに登録して公開してもよいでしょう。
Asset StoreやカスタムのUnityPackageを入れるCustomPackages
フォルダーやGeneralSharedPackages
フォルダーは共有しないか、共有する場合はプライベートリポジトリーにしたり、限定公開設定のクラウドなどで共有するとよいでしょう。
前提条件
- Windows7 64-bit
- Projenyはインストール済み。まだの場合はこちらに従ってインストールしてください
- Unity2017.3 + Visual Studio 2017
- Gitをインストール済み
共有部分の作成
まずはProjenyの設定ファイルをユーザーフォルダー直下に作成します。
共通のProjeny.yamlの作成
- コマンドプロンプトを起動します
- ユーザーフォルダーの場所で開いていることを確認(別の場所だったら、
cd %USERPROFILE%
などで移動) prj -cc
を実行して、設定ファイルを作成します
PathVars: # 全てのProjenyプロジェクトが利用する共有パッケージフォルダー SharedUnityPackagesDir: 'C:\Users\YourUserName\Documents\UnityProjeny\GeneralSharedPackages' # UseDevenv設定がtrueの場合に利用される設定。 # Visual Studio Solutionの操作で失敗する場合、以下のパスが正しいか設定する。 VisualStudioCommandLinePath: 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.com' # Package Managerの"Open Solution"ボタンや、`prj -ocs`コマンドを実行した時に使われる。 VisualStudioIdePath: 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.exe' # 独自のReleaseソースを指定する。 ReleaseSources: - LocalFolder: Path: 'C:\Users\YourUserName\Documents\UnityProjeny\CustomPackages'
設定されているパスは、ご自身の環境に合わせて変更してください。また、YourUserName
の場所は、ご自身のユーザー名に変更してください。
フォルダーの作成
- 必要なフォルダーを作成します。Projeny用のプロジェクトフォルダーを作成したいところへ移動します
- 以下でフォルダーを作成します(変更しても構いません)
mkdir UnityProjeny mkdir UnityProjeny\CustomPackages mkdir UnityProjeny\GeneralSharedPackages
以上で共有部分の作成は完了です。ここまでの作業は、最初の1回だけやります。
Projenyプロジェクトの作成
個別のプロジェクトのためのProjenyプロジェクトを作成します。
- コマンドプロンプトを開きます(開いていたら、そこで作業を継続して構いません)
- 先に作成した
UnityProjeny
フォルダーの中にcd
で移動します。 - 以下のコマンドを実行します。
taiken03-201703
の部分は例のプロジェクト名なので、自由に変更してください
mkdir taiken03-201703 cd taiken03-201703 prj -cc
これで、プロジェクト用のフォルダーを作成して、cd
で中に移動して、以下が自動生成されます。
- プロジェクト用の
Projeny.yaml
UnityPackages
フォルダーUnityProjects
フォルダーUnityProjects
フォルダー内のデフォルトのProjenyProject.yaml
このフォルダーのProjeny.yaml
は以下のようにしました。
PathVars: UnityProjectsDir: '[ConfigDir]/UnityProjects' ProjenyPackagesDir: '[ConfigDir]/UnityPackages' LogPath: '[ConfigDir]/PrjLog.txt' # Unityの場所。デフォルト以外の場所にしていたら、以下を設定すること # UnityExePath: 'C:\Program Files\Unity20170300\Editor\Unity.exe' DefaultProject: taiken03-201703
共有パッケージはホームフォルダーで指定したので、ここではProjenyPackagesDir
の設定に変更して、このプロジェクト用のパッケージ置き場を指定しました。また、このフォルダーではデフォルトのプロジェクトはtaiken03-201703
なので、その設定を加えました。
Unityのバージョンはプロジェクトごとに異なる可能性があるので、UnityExePath
の雛形をコメント行に加えてあります。Unityをデフォルトの場所以外にインストールしていたり、複数バージョンのUnityを利用している場合は、UnityExePath
のコメントを外して、使いたいUnityのパスを設定してください。
UnityProjects/ProjenyProject.yaml
ファイルは以下の通りです。恐らく変更は不要だと思いますが、コメントをつけておきました。これで、このProjenyプロジェクト内で共有するパッケージの場所をProjenyPackagesDir
、全てのProjenyプロジェクトで共有するパッケージの場所をSharedUnityPackagesDir
、Unityプロジェクト内でのみ使うパッケージの場所をUnityのAssetsフォルダー下のPackages
フォルダーに設定しています。
PackageFolders: # このProjenyプロジェクト全体で共有するパッケージフォルダーの指定です # 特に問題がなければ、このプロジェクトのパッケージはここに作ります - '[ProjenyPackagesDir]' # 全てのProjenyプロジェクトで共有するパッケージフォルダーの指定 - '[SharedUnityPackagesDir]' # [ProjectRoot] は UnityProjects/YourProjectName を示します # Unityプロジェクト専用のパッケージがあれば、この下に配置します - '[ProjectRoot]/Packages'
Unityプロジェクトの作成
Projenyのプロジェクトはできたので、次にUnityプロジェクトを作成します。先に作成したC:\Users\YourUserName\Documents\UnityProjeny\taiken03-201703
フォルダーで作業します。
Gitでバージョン管理をしたい場合は、Unity用のプロジェクトを作成する前にGitの初期化をしておきます。これを事前にやっておくことで、.gitignore
ファイルが自動的に生成されます(バージョン管理をしない場合は飛ばして構いません)。
git init
次に以下で、Projenyプロジェクト内のUnityProjects
フォルダー内にターゲットとなるプロジェクトを作成して、初期化をします。
prj -p taiken03-201703 -cpr prj -in
以上で、UnityProjects
フォルダー内にtaiken03-201703
フォルダーが作成されて、その中のtaiken03-201703-Windows
フォルダーがUnity用のプロジェクトになります。
作成したプロジェクトの使い方
作成したProjenyプロジェクトは以下のような構成になります。
このフォルダー下は、.gitignore
で定義されたフォルダー以外は全てGitで管理することを想定しています。
それでは、Unityでtaiken03-201703-Windows
フォルダーを開きましょう。
新しいシーンやスクリプトを作成する
ここからの作業は、手順としては公式マニュアルには書かれていないので手探りで理解しました。
Projenyでは、全てのリソースは何からのPackageに属している必要があります。そのため、いきなりシーンを保存しようとしたり、新しいスクリプトを作成すると、以下のようなエラーが発生します。
「Projenyが関知しないところにディレクトリーが作成されたので、このデータを失う可能性がある。全てのユーザーデータは、UnityPackagesディレクトリー内になければならない。」ということです。
では、このUnityプロジェクトのパッケージを作ります。
- UnityのProjenyメニューからPackage Manager...を選択して開きます
- 左三角をクリックして、Packagesを表示します
- "Packages"の下のコンボボックスをクリックして開いて、[ProjenyPackagesDir]を選択します。ここがこのProjenyプロジェクトの共有パッケージで、このプロジェクト用に作成するリソースは基本的にこのパッケージに設定します
- [New]をクリックします
- パッケージ名を入力して、"Submit"ボタンをクリックします。パッケージ名はここでは
taiken03-201703
としました
- これでパッケージができました。これだけだとまだUnityが使えるようになりません。作成したパッケージをドラッグして、"Assets Folder"にドロップします
- "Update Directories"ボタンをクリックすると、Directory Linkに反映されて、UnityのProjectビューに
taiken03-201703
フォルダーが表示されます
以上でパッケージが出来上がります。これ以降、このプロジェクトのリソースはこのtaiken03-201703
フォルダーの中に保存していきます。
簡単なシーンを作ってみる
試しに、球を操作できるような簡単なシーンを作ってみます。
- ProjenyのPackage Managerはとりあえず不要なので、[x]ボタンをクリックして閉じます
- Projectビューの"taiken03-201703"を右クリックして、Create -> Folderを選択して、フォルダーを作成します
- フォルダーの名前を
Scenes
にします - [Ctrl]+[S]キーを押して、シーンを保存します
- "Save Scene"ダイアログが表示されたら、
taiken03-201703
->Scenes
と開いて、Tameshi
などのファイル名で保存します
これで以下のようにシーンが保存できました。
これでHierarchyの変更はこのシーンに保存されます。では、球を作成します。
- HierarchyビューのCreateから3D Object -> Sphereを選択します
- 操作するためのスクリプトを作成します
- Hierarchyビューに作成したSphereを選択します
- Inspectorビューの下の"Add Component"ボタンをクリックして、Physics -> Rigidbodyを設定します
- Inspectorビューの下の"Add Component"ボタンをクリックして、New Scriptを選択します
- スクリプト名は適当に
Sousa
などにしておきます - この場所はPackage外ですのでProjenyに怒られます。taiken03-201703パッケージに新しい‘Scripts`という名前のフォルダーを作成して、その中に移動しましょう
using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof (Rigidbody))] public class Sousa : MonoBehaviour { [TooltipAttribute("移動速度")] public float SPEED = 10f; private Rigidbody rb; // Use this for initialization void Start () { rb = GetComponent<Rigidbody>(); rb.useGravity = false; } // Update is called once per frame void Update () { Vector3 ctrl = new Vector3( Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"), 0f ); Vector3 vel = ctrl.normalized * SPEED; rb.velocity = vel; } }
できたら、上書き保存をしてUnityを実行してください。矢印キーや、[W][A][S][D]キーで球が操作できます。
ここまでの作業で、追加されたり変更があったフォルダーやファイルは以下の通りです。
スクリプトやシーンが、"UnityPackages"フォルダーに追加されていることが分かります。本来、Unityのリソースは、Unityプロジェクトフォルダー内の"Assets"フォルダーにあるのですが、Projenyを使うとその構造が変わる、ということが見てとれます。これが、後のAsset Storeや共有パッケージの利用時に役立つのです。
Asset Storeのアセットの利用
Asset Storeのアセットの組み込み方です。これがProjenyを使ってみようと思いたった機能です。
アセットを利用するには、以下の手順を踏みます。
- Asset Storeからアセットをダウンロード(これまでにダウンロードしたことがあるアセットでは不要です)
- "Releases"から、共有パッケージにドラッグ&ドロップして加えます
- パッケージからPluginフォルダーに加えます
- Directory Linkを更新します
最初のステップは省略できる場合が多いので、まずは"Releases"から共有パッケージに加える作業から試みましょう。
アセットを共有パッケージに加える
Asset Storeのアセットは、共有パッケージフォルダーに展開します。この作業は一度やれば、2回目以降は最初から共有Packagesに列挙されるので飛ばすことができます。
- UnityのProjenyメニューからPackage Manager...を選択して開きます
- 赤枠で囲んだ辺りにある左三角ボタンを、"Releases"欄が表示されるまでクリックします
Asset StoreのパッケージはGitで管理したくないので、"SharedUnityPackagesDir"に加えます。
- ウィンドウ右上の"Packages"の下のコンボボックスをクリックして、[SharedUnityPackagesDir]に変更します。
"SharedUnityPackagesDir"は、ホームフォルダー直下のProjeny.yaml
に加えた設定で、Gitで管理しない位置の共有用フォルダーを指しています。使いたいアセットを"Releases"からドラッグして、"Packages"欄の下にドロップして加えていくと、"SharedUnityPackagesDir"で指定したフォルダーにAsset Storeのアセットが展開されていきます。
以下、"Allosaurus"と"Post Processing Stack", "Unity Particle Pack", "Japanese Otaku City"を加えた例です。
足りないアセットをAsset Storeからダウンロードする
必要なアセットが全て揃っていたら、次へ進んでください。使いたいアセットが無かった場合の手順です。
- UnityのWindowメニューからAsset Storeを開きます
- Sign in してなかったらします
- 欲しいアセットを検索して、必要なら購入します
- "ダウンロード"ボタンをクリックして、ダウンロードします。以下は、Standard Assetsを例にしています
- ダウンロードが完了したら自動的に展開されて、インポートするかを聞かれますが、インポートはしないでください!
直にインポートしてしまうと、新しいフォルダーを作った時と同様、Projenyが管理するべきフォルダーを無視して読み込んでしまいます。読み込みもProjenyのPackage Mangerで行う必要があります。
必要なアセットを全て上記の流れでダウンロードだけしてください。完了したら、アセットを共有パッケージに加えるの手順で、共有Packageに加えてください。
間違えてインポートしてしまったら
簡単に取り消す方法はないので、一つ一つ削除するしかありません。まずはエラーを確認して、問題のフォルダーを見つけます。
以下のように、"The directories in question are following:"という行と、"UnityEngine.Debug:LogError(Object)"という行の間に、問題のフォルダーが表示されています。
これをProjectビューなどで見つけて削除してください。
削除後、エラーが表示されなくなったらOKです。
PackagesのアセットをPlugins Folderに追加する
ここまでだと、パッケージを展開しただけで、Unityプロジェクトには組み込まれていません。Plugins Folderに読み込む必要があります。
- Package Managerを開いていなかったら、UnityのProjenyメニューからPackages Manager...を選んで開きます
- 左右どちらかの三角をクリックして以下の"Packages"と"Project"が表示される画面にします
- "Packages"の下のコンボボックスが"[SharedUnityPackagesDir]"になっていなかったら、クリックして開いて選択します
- "Packages"のリストから、使いたいアセットを選択して、"Plugins Folder"にドラッグ&ドロップします。
- "Update Directories"ボタンをクリックします
以上で、追加したアセットへのDirectory Linkが生成されて、Unityのプロジェクトにアセットが組み込まれます。最初の一回は、リソースの再構築が必要なので、作業が完了するまでしばらく待ってください。以下のウィンドウが表示されたら"I Made a Backup, Go Ahead!"をクリックしてください。
Pluginsフォルダーに追加したので、以下のようにProjectビューのPlugins
フォルダー下に配置されます。
一度登録したアセットは、"SharedUnityPackagesDir"を同じ場所に指定すれば、他のProjenyプロジェクトでもすぐにPackages欄から使えるようになります。2回目以降はインポート時間や容量を減らすことができます。
組み込んだアセットの削除方法
先にインストールしたアセットのうち、"Post Processing Stack"は、"Unity Particle Pack"に含まれているので、スクリプトでエラーが発生してしまいました。このような時のアセットの削除方法です。
- UnityのProjenyメニューからPackage Manager...を選択して開きます
- Plugins Folderから不要なパッケージを選択します
- [Delete]キーなどでリストから削除します
- "Update Directories"ボタンをクリックします
実ファイルを削除しなくても、これでDirectory Linkが削除されて、Unityプロジェクトから削除することができます。
GitHubなどで公開にする時の設定
ここまでの説明では、非公開の共有Packagesと、公開の自分のPackagesの主に2箇所での設定でした。しかし、GitHubで公開を前提とした場合、パスワードや重要な情報はダミーにして、テスト用のものは非公開のPackageを用意した方がよさそうです。
例えば、Projenyプロジェクト直下のProjeny.yaml
に、以下のようにIgnorePackagesDir
という設定を追加します。
PathVars: UnityProjectsDir: '[ConfigDir]/UnityProjects' ProjenyPackagesDir: '[ConfigDir]/UnityPackages' IgnorePackagesDir: '[ConfigDir]/IgnorePackages' LogPath: '[ConfigDir]/PrjLog.txt' # Unityの場所。デフォルト以外の場所にしていたら、以下を設定すること # UnityExePath: 'C:\Program Files\Unity20170300\Editor\Unity.exe' DefaultProject: taiken03-201703
次に、同じフォルダーの.gitignore
に以下の設定を追加します(なければファイルを作成します)。
**/IgnorePackages/** **/IgnorePackages.meta
UnityからProjenyメニューのPackage Manager...を選択して開いて、Projectの"Edit"ボタンをクリックします。
しばらく待つと、Visual Studioなどで、ProjenyProject.yaml
ファイルが開きますので、以下のように[IgnorePackagesDir]
を加えます。
PackageFolders: # このProjenyプロジェクト全体で共有するパッケージフォルダーの指定です # 特に問題がなければ、このプロジェクトのパッケージはここに作ります - '[ProjenyPackagesDir]' # 全てのProjenyプロジェクトで共有するパッケージフォルダーの指定 - '[SharedUnityPackagesDir]' # [ProjectRoot] は UnityProjects/YourProjectName を示します # Unityプロジェクト専用のパッケージがあれば、この下に配置します - '[ProjectRoot]/Packages' # GitHubで管理しないパッケージ - '[IgnorePackagesDir]`
あとは以下の通り、Unityで設定します。
- Package Managerで"Packages"を開きます
- コンボボックスを
[IgnorePackagesDir]
にします - [New]ボタンをクリックして、
IgnorePackages
という名前のパッケージを作成します - それを"Project"の
Assets Folder
欄にドラッグ&ドロップして、"Update Directories"をクリックします
以上で、UnityにIgnorePackages
というフォルダーが表示されます。この中に入れたリソースは、GitHubにはアップされません。
まとめ
Projenyでプロジェクトを構築して、リソースの新規作成や組み込み、Asset Storeのアセットの組み込みができるようになりました。
Projenyでは、全てのリソースは何れかのPackageに属さなければいけない、ということを念頭に入れておく必要があります。Packageフォルダー内であれば、削除や追加は普通の操作でできますが、Packageを削除する場合は、Package Managerを使う必要があることも注意です。また、フォルダー構造を変えたら、"Update Directories"をクリックすることも忘れてはいけません。
Asset Storeのアセットのうち、個別のフォルダーやファイルの読み込みをキャンセルしたり、あるプロジェクト向けの改変をしたい時などは、予めプロジェクトを分けるなどの運用上の工夫も必要になりそうです。
学習コストがやや必要で、まだ手放しで利用を推奨できる完成度には至っていないと思います。しかし、一度理解して環境を作ってしまえば、Asset Storeのアセットを使い回す時の手間が減るのと、容量が膨らまないという点だけでも、個人的には大きなメリットだと感じます。また、プロジェクトをPackageごとに簡単にフォルダーに分割できるので、Gitで管理するか楽になりました。
しばらくは使い続けてみようと思います。