mikan_daisuki’s blog

IT系サラリーマンの日記。前職ではスマホゲームを、現在はアプリを作ってます。



Unityでイラっとする7つのことと、その対処法を考える

f:id:mikan_daisuki:20150124105613j:plain

ほんと、Unityでゲーム開発をしてると、ちょいちょいイラっとする。
 
特に、始めて3ヶ月くらいは、怒りで頭がおかしくなりそうだった。
隣に座る新卒に怒り散らす日々だ。
 
ぼく「ねぇ、またアセットインポートで動かなくなっちゃったんだけどー」
新卒「うーん、まあしょうがないですねぇ。待つしかないです。」
ぼく「なんでこんな待たなきゃいけないんだよー!Webはよかったなぁ」
新卒「いやいや、Webとはモノの複雑さが違いますよ。」
ぼく「むむ・・・」
   

ってかんじ。

 

彼はぼくよりUnity歴が長いからか、なんともなさそう。

  

ぼくも半年ほどUnityと付き合ってきたので、
その気持ちは少しずつ薄れつつあるけど、
これは結構大事な気がするので、書いておこうと思う。
イラッとすることだけ書いてもアレなので、対処法も考えてまとめてみる。
 
ちなみに、正直な話、Unityが悪いのかはよくわかってない。
僕はずっとWeb屋だったので、そう言う人がUnity使ってゲームとか作ってると、イライラが止まらない、という話。
 
ざっとまとめると、下記の通り。
 
  1. アセットインポートに時間がかかりすぎる
  2. ビルドに時間かかりすぎ(よくやるのはiOS)
  3. アセットバンドルのビルドも時間かかる
  4. Switch Platformもやばい
  5. .metaファイル邪魔
  6. UI作るの面倒すぎ
  7. Monodevelopで日本語くらい使えるようにしてくれ

 

1.アセットインポートに時間がかかりすぎる

 

f:id:mikan_daisuki:20150123102249p:plain一番イラッとするのはコイツ。他の開発メンバーがテクスチャ(画像)を大量に更新すると、起動したときに延々と待たされる。下手すると、1時間くらい待つこともある。

 

対処法1 キャッシュサーバー(チームライセンスが必要)を導入する (?)

Unity - コラボレーション - Unity Team License

 

お金のある方はたぶんコレが良い。

Unityでは有料でキャッシュサーバーなるものを提供している。コレを使うと、一度インポートされたアセットはキャッシュされて他の開発メンバーもインポートせず使えるようになるらしい。

自分は使ったこと無いので、効果のほどは残念ながら不明、、

(使ったことある方教えてください・・・)

 

対処法2 自分が作業してない時間に自動で更新するようにcron設定

個人的にはコレをcron設定することで、ある程度満足している。


gist:3062ae6005c89c5baa28

 

これはMavericks向け。Yosemiteはこちらを見てください。


Mac Yosemiteでの外部からログインしてssh-agentを正しく使う方法

 他、参考にしたURL

 

2.ビルドに時間かかりすぎ(よくやるのはiOS)

ちょっとググってみたら仲間が!!

unity ios build 遅い - peroon's diary
 

全く同じソースなら一度ビルドすれば早くなるんだけど、更新するとどうしても遅くなる。

対処法1 (書いてて思ったけど)定期的にビルドする

さっき書いたのと一緒 笑

自PCでビルドして実機確認したいとき、というのはあると思うので、

その時間を短縮したい場合は、定期的にビルドしておくしかなさそう。

 

ぼくはただただ待っているだけですけどね!

今度試してみよっと。

 

対処法2 Jenkinsを導入する

f:id:mikan_daisuki:20150123114008p:plain

出典: Welcome to Jenkins CI! | Jenkins CI

 

対処法1は自PCを使う場合だけど、サーバーを立てて、Jenkinsで自動化する方法もよく使われているよう。


UnityのビルドをJenkins氏に任せて楽したい。 - ともち屋

 


Unity3D - Jenkinsさんでビルドしてスマホでの確認を楽ちんに - Qiita

 

ググって出てくるということは、結構やられている、という証拠。

3.アセットバンドルのビルドも時間かかる

てかアセットバンドルって何?て方はこちら。
 
1ファイル更新するだけで、全部作り直しちゃってるみたい。
コード読んでないけど、実装の問題かも。
 
対処法1 Jenkin (ry

時間かかるのは変わらないけど、別のマシンでやっといてくれるだけでだいぶ変わる。

対処法2 差分更新の実装に変える

こういうロジック入れると、更新判定のロジックが甘くて

「ビルドしたはずなのに、更新されないアセットがあるんですけど・・・」

とかなって、また大変かもしれないけど。

対処法3 指定のアセットのみ、ビルドできるようにする

書いてて思ったけど、これは入れるべき。

Unity社のDocumentにも、指定アセットでビルドするサンプルがあるし、

簡単にできそう。

http://docs-jp.unity3d.com/Documentation/Manual/BuildingAssetBundles.html

 

4.Switch Platformもやばい

f:id:mikan_daisuki:20150124095546p:plain

これですよ。この左下のボタン。

iOSからAndroidに切り替えよ、と思っておもむろにコイツを押すと、

f:id:mikan_daisuki:20150123102249p:plain

コイツがまた走って、全部インポートし直し、みたいな挙動になる。

めっちゃ時間かかって泣ける。

 

対処法1 Fast Platform Switch(有料)を使ってみる


Unity:プラットフォーム切り替えが遅い - ゲーム制作ブログ

 

こちらでも紹介されているが、結構早くなるらしい。

気になる方はコチラから。

https://www.assetstore.unity3d.com/jp/#!/content/11134

対処法2 リポジトリを2カ所に置いて、iOSAndroidで分けて使用する

コレが一番簡単で、無料だし困らないかも。

ぼくは、定期的にcronでリポジトリを最新にしてアセットインポートを実行してるので

起動が遅くて困ることもない。

works/myapp-ios

works/myapp-android

こんなかんじで分けてる。

 

(以降はただウザいだけなので対処法は割愛)

5..metaファイル邪魔

特に困るのはフォルダ。gitではフォルダを管理してないので、

一度フォルダが作られた後に中身が空になると、フォルダは行き場を失う。

フォルダに対しても.metaがあるので、ムダに.metaが生まれてウザい。

 

ファイルについても、コマンドラインでカジュアルにmvしたいけどできず、

mvした後一度起動し、.metaが移動・更新されるのを待って

リポジトリに取り込まなければならない。

6.UI作るの面倒すぎ

cssみたいに、margin, padding, width, height, floatとかで簡単に実装したい。

NGUIを使っているが、Anchorの挙動がウザい。

少なくともwidthとheightを入力するときは優先的に指定したいのに、

Anchor優先で勝手にwidth, heightが変わるから、ちゃんと指定できない。

Anchorでmarginを自分で考えていれないといけない。

最近は慣れたからいいけど、直感的でない気がする。

7.Monodevelopで日本語くらい使えるようにしてくれ

Unityのせいじゃないかもしれないけど、デフォルトで同梱されてるIDE
日本語入力対応してないって・・・(´・ω・`)ショボーン
しょぼーんだよ、ほんと。
 


痛Monodevelop - けいごのなんとか

 
ぼくはコレを使っている。Unity-chanいらんけど。
 
(追記)
ちなみに、Unityが嫌いな訳ではない。
イケてるとこもたくさんある。
今度は、感動したことを書いてみよう。