kazumalab tech log

流行りとリラックマと嵐が大好きです。技術的ログ。

Unityをターミナルから起動してみたい!

かずまです。

今回はUnityをMacのターミナルから起動してみます!
一応その方法は公式には書いてありますね。

docs.unity3d.com

/Applications/Unity/Unity.app/Contents/MacOS/Unity

これで起動できるのか。なるほど。

ってかGUIでいいだろ

いやいや、GUIだと自動でgitの設定できないじゃん!
しかも毎回gitignoreを作るのだるいし!

毎回打つの面倒だし、オプションも覚えられないので、自分なりにこうだったらいいな〜
ってのを作って見ました。

目標

作る時

# unity new <project_name>
  1. プロジェクトの生成
  2. .git & .gitignoreの生成

開く時

# unity open <project_name>
  1. .gitがない場合は.gitignoreも含めて生成してくれる
  2. ディレクトリに直接コマンドで移動して作るので二度手間にならない

/usr/local/bin以下にはコマンドを作らない

このQiitaの記事のコメントに

qiita.com

おーシンボリックリンクで作ればいいんじゃんってことが書かれてました。
納得!

なので、その方向でいきますね。
なんだかんだshellScript書くのは初めて。

とりあえず起動してみる

# cd ~/.local/
# vim unity

/Applications/Unity/Unity.app/Contents/MacOS/Unity

これであとは権限を変更してシンボリックリンクを/usr/local/bin/へ張る。

# sudo chmod a+x unity
# sudo ln -si ~/.local/unity /usr/local/bin

とりあえずこれで

# unity

って打てばとりあえず起動できる!

新規プロジェクトを立ち上げたい

これできればめっちゃいいと思うんですよね。
UnityをMacでやるようになってからずっと思ってました。

ということで、以下のようなコードを書いて見る・・・。

if [ -n "$1" ]
then
  if [ "$1" = "new" -a -n "$2" ]
  then
    /Applications/Unity/Unity.app/Contents/MacOS/Unity -createProject ~/Documents/"$2"
    cd ~/Documents/"$2"
    git init
    curl https://raw.githubusercontent.com/github/gitignore/master/Unity.gitignore >> .gitignore
elif [ "$1" = "open" -a -n "$2" ]
  then
    /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath ~/Documents/"$2"
  else
    /Applications/Unity/Unity.app/Contents/MacOS/Unity
  fi
else
 /Applications/Unity/Unity.app/Contents/MacOS/Unity
fi

$1 = 第一引数 では new または open を指定

$2 = 第二引数 では プロジェクト名を指定

gitignoreはここのrowファイルをcurlでファイルを生成しています。
github.com

もちろん新規プロジェクトはクリエイトされるし、成功する。
だけどUnityも開いてgitの設定もしてくれるだろうということで書いてみたけど、Unityのプロセスが走りっぱなしでUnityを終了するまで実行されなかった。

うーん、これだとUnityを起動して、一度止めないといけないので面倒だ〜。
で、途方に暮れてさーっとブラウジングしてると。。。

stackoverflow.com

お、なんかこれで新規Windowのターミナル立ち上げてそこから起動すればいいっぽいな〜って感じでこう書いて見た。

if [ -n "$1" ]
then
  if [ "$1" = "new" -a -n "$2" ]
  then
    osascript -e 'tell application "Terminal" to do script "/Applications/Unity/Unity.app/Contents/MacOS/Unity -createProject ~/Documents/\"$2\""'
    cd ~/Documents/"$2"
    git init
    curl https://raw.githubusercontent.com/github/gitignore/master/Unity.gitignore >> .gitignore
elif [ "$1" = "open" -a -n "$2" ]
  then
    /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath ~/Documents/"$2"
  else
    /Applications/Unity/Unity.app/Contents/MacOS/Unity
  fi
else
 /Applications/Unity/Unity.app/Contents/MacOS/Unity
fi

一応これでいけたっぽい?
いや、だめ、引数2つめをto do scriptで渡してるけどうまく渡せてないらしい。
これだとプロジェクト名が$2になってしまう。なので振りだしに。。。

もし、to do scriptでvalueを渡す方法があればどうか、教えてください。(切実)

さらにこれだとDocuments直下にしか作れないのでそれは便利とは言えないので、移動した直下にプロジェクトをつくる仕様に変更します。

移動した先でプロジェクトを作成する

if [ -n "$1" ]
then
  if [ "$1" = "new" -a -n "$2" -a ! -e ./"$2" ] 
  then
    mkdir $2
    cd $2
    git init
    curl https://raw.githubusercontent.com/github/gitignore/master/Unity.gitignore >> .gitignore
    cd ..
    /Applications/Unity/Unity.app/Contents/MacOS/Unity -createProject ./$2
  elif [ "$1" = "new" -a -n "$2" -a -e ./"$2" ]
  then
    echo "$2" project exist, so use option "\"open <project name>\"" 
  elif [ "$1" = "open" -a -n "$2" ]
  then
    if [ ! -e ./"$2"/.git ]
    then
     cd ./"$2"
     git init
    curl https://raw.githubusercontent.com/github/gitignore/master/Unity.gitignore >> .gitignore
    fi
    /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath ./"$2"
  else
    /Applications/Unity/Unity.app/Contents/MacOS/Unity
  fi
else
 /Applications/Unity/Unity.app/Contents/MacOS/Unity
fi

一度ディレクトリを作って、gitの設定を先にしておいてその中にプロジェクトを作るという形。
すっごく頭悪そう。笑

でも今の所動いているのでこれで一旦終了ですね。
毎回gitignoreを書くの面倒だし、ここまでプロジェクト作ってやってくれるのは結構楽でした。

一応、既存のプロジェクトがある場合はError Logを出したりしてるので実用的に使えるはずです。

将来的なところとまとめ

qiita.com

ここのgitignoreはできてるので、それ以外のUnity上で設定しなければいけない部分を自動でできるとめっちゃいいのだが。。。

まぁ今回は自分がとりあえずやりたい!ってのをやったのでコードは汚いのでお許しください。