Windows
PowerShell
Unity

Unityのディレクトリ構成と.gitignoreを自動で作るWindows PowerShellスクリプト

どんなの

Unityで開発するときにAssets以下のテンプレディレクトリ構成と、Unity用の.gitignoreを作ってくれるPowerShell用スクリプトです。
UnityのプロジェクトフォルダをD&Dすると勝手に用意してくれます。
作ってる途中でUnityで開発するときにフォルダ構成と.gitignoreを作る便利スクリプトを見つけて、あーかぶってしまったと思いましたが、あちらは.shだったので、こちらはWindows向けということで。(Windowsでも.shを使うぞという方はあちらをぜひ)
Githubの方に公開していますので、そこからクローンなり.zipでダウンロードなりしてもらえればすぐ使えます。

まずはバッチファイル(.bat)

PowerShellじゃないん......
PowerShellスクリプトにD&Dできなかった+この方が楽という罠(参考:Powershellを楽に実行してもらうには)

Project folder D and D in this file.bat
@echo off
echo make dir......
powershell -NoProfile -ExecutionPolicy Unrestricted %~dp0UnityDirectorySetting.ps1 "'%~dp0' '%1' '%~n1'"
echo finished!

#pause > nul
exit

自身のいるディレクトリのパスとD&Dされたプロジェクトフォルダのパスと名前をPower Shellスクリプトの方に渡します。
自分の場所は渡さなくてもいいよねっていう意見はごもっともだと思います。

そしてPowerShellスクリプト(.ps1)

UnityDirectorySetting.ps1
$settingPath = $Args[0]
$projectPath = $Args[1]
$projectName = $Args[2]

echo $settingPath
echo $projectPath
echo $projectName

$file = (Get-Content "$settingPath\setting/directory.txt") -as [string[]]
$i = 1
foreach($f in $file) {
    New-Item ("$projectPath\Assets/$projectName/$f") -itemType Directory
    $i++
}

Invoke-WebRequest -Uri https://raw.githubusercontent.com/github/gitignore/master/Unity.gitignore -OutFile ("$projectPath\.gitignore")

             
バッチファイルから受け取ったパス(プロジェクトフォルダのパス)以下Assets/[プロジェクト名]/の下にテンプレディレクトリを作っていきます。
そしてプロジェクトフォルダ直下に.gitignoreを作ります。
.gitignoreはgithubの提供してるものをもらってくるようにしています。

テンプレディレクトリ構成

先ほどの@takishさんのエントリを参考にディレクトリ構成を作りました(Shadersを追加したくらい)
これを.batと.ps1同じディレクトリにsettingディレクトリを作って、その下に入れてください。

directory.txt
Scenes
Preafabs
Scripts
Animations
Materials
Shaders
Physics Materials
Fonts
Textures
Audio
Resources
Editor
Plugins

ここに書いてあるものを作成するので好みに合わせて書き換えてください。
Scenes/Stage1 のように書けばちゃんと子ディレクトリも作られます。

ディレクトリ構成

こんな感じで置いてもらえれば大丈夫です。

hoge/
├Project folder D and D in this file.bat
├UnityDirectorySetting.ps1
└setting/
  └directory.txt

使い方

  1. Unityの新規プロジェクトを作成
  2. Edit->Project Settings->EditorでVersion ControlをVisible Meta Filesに変更 +(多分平気)Asset SerializationをForce Textに変更
  3. Unityプロジェクトのフォルダ(Assetsの親)を"Project folder D and D in this file.bat"にドラッグ&ドロップ

以上でAssets以下にプロジェクト名と同じディレクトリが作成され、その中にsetting/directory.txtに書かれたディレクトリが作成される+プロジェクトディレクトリ以下に.gitignoreが作成といった感じです。

おわりに

前々から面倒だなぁ思ってたので、Power Shellスクリプトを試しがてら作ってみました。
Editor拡張と悩んだのですが、.unitypackageを入れるのとどっちが楽かなと考えてこっちにしました。
.unitypackage入れたりせずにEditor上でボタン一つでできると楽ですけどねー。できるのかな。