2012年5月5日土曜日

自作の Unity Editor Script を github に公開してみた



最近は仕事の関係でUnityばっかり触っているのですが、中でも今お気に入りなのがEditor拡張機能です。これは自分で簡単なスクリプトを書くだけでUnityのエディタ上の表示を自由にカスタマイズできる機能なのですが、コイツの出来がなかなか素晴らしいのです。これまでいろんな開発環境を触ってきたのですが、ここまで簡単にエディタ上の表示を自在にカスタマイズできる環境は他に類がありません。

ということで調子に乗って自作のEditor拡張機能を書いて公開してみることにしました。まずは簡単なものからということで、シーン上に配置できる定規を作りました。


■機能
  • 原点からの距離(u)、高低差(u)、対象位置地面の水平方向傾き(度)を測定可能 ※1u=Unity上での長さの単位1とします
  • イメージを見ての通り全数値がエディタ上に表示されるので一目でわかる
  • Raycast飛ばしてるので確実に地面位置を基準にして判定してくれる、Raycastが外れても空中の座標がきちんと出る隙を生じぬ二段構え
  • 画面上の色/フォントを自由にインスペクタから変更可能
  • すべてEditorScript/Gizmoなので万が一何かの間違いでリリース版のシーンに残っていてもMesh Rendererが走って画面に表示されるという悲しい思いをしない
  • 操作は原点を選択してAdd Pointボタンを押して出てきた点を任意の位置に移動して配置するだけ
  • Clear Pointボタン付き
ひと通り基本的なのは揃えてみました。


次は高低差メッシュをTerrainの上に表示する機能とか作ってみたいっすね。

2012年5月4日金曜日

Unity の GUIStyle でデフォルトで指定できるスタイル一覧

今回は完全に自分用メモになってしまいますがご了承ください><

UnityのGUIStyleはname文字列を指定して生成する事が可能ですが、Unityがデフォルトで持っているGUIStyleの一覧を見つけたので列挙しておきます。
  • box
  • button
  • toggle
  • label
  • textField
  • textArea
  • window
  • horizontalSlider
  • horizontalSliderThumb
  • verticalSlider
  • verticalSliderThumb
  • horizontalScrollbar
  • horizontalScrollbarThumb
  • horizontalScrollbarLeftButton
  • horizontalScrollbarRightButton
  • verticalScrollbar
  • verticalScrollbarThumb
  • verticalScrollbarUpButton
  • verticalScrollbarDownButton
  • scrollView
大文字小文字は関係ないみたいです。たとえばboxのところをBoxと指定しても問題なくそのまま通ります。

参考URL: http://answers.unity3d.com/questions/9844/copypaste-guistyle-in-the-inspector.html
参考URL: http://unity3d.com/support/documentation/Components/gui-Customization

2012年4月22日日曜日

Unity Asset Serverを導入してみた

先日のiphone_dev_jp東京の勉強会での発表資料に書いた内容と同じなのですが、結局あの場では発表できませんでしたので、改めてUnity Asset Serverを触ってみた感想などを書いてみようかと思います。


■Unity Asset Serverって何?

Unity社が提供している、Unityのエディタと完全に統合されたバージョン管理システムです。
http://unity3d.com/unity/team/assetserver/
ソースコードだけではなく、プレファブやシーンを含めたUnityのプロジェクト全体のリソースを管理してくれます。Unityのエディタと統合されているため、Unityのエディタから一切外に出ることなくバージョン管理ができるというのが売りです。実はUnity Asset Serverは完全に普通のPostgresSQLのサーバーをそのまま利用しているだけになっていますので、SQLを経由してバージョン管理の履歴を操作したりも出来ます。


■Unity Asset Serverを使う理由は?

なんといっても以下の3つがUnity Asset Serverの魅力でしょう。
  • 導入するのが非常に簡単。サーバー側はインストーラーをぽちぽちするだけでWindows, Mac, Linuxどの環境でも一発です。クライアント側はUnityにそのまま付属されてくるためインストールなんぞ一切不要です。Team Licenseをアクティベーションしたらすぐに使えます。
  • 運用するのが非常に簡単。管理者側もユーザー側も、バージョン管理未経験の人でもUnityエディタのGUIを経由して誰でも簡単に使用することができます。
  • 動作がそこそこ高速。バックエンドがPostgresSQLなおかげだと思うのですが、LAN環境で最大10MB/s程度の速度でコミットしたりアップデートしたりできています。これはテクスチャや音楽、3Dモデルなどの巨大なバイナリファイルを大量に扱うゲーム開発においてはかなり重要です。

■でもお高いんでしょう?

はい。お一人様5万円となっております。

お一人様、5万円です。

マジです。

なかなかボッタクリ挑戦的な価格設定だと思います。


■よかったところ

実際に2ヶ月間ほど運用してみてよかったところはこんな感じです。
  • だれでも超簡単に使えます。とにかく超簡単。これはプログラムなんて全くわからないデザイナーさんや、バージョン管理未経験の人、はたまた入社2日目の人でもなんの問題もなく使えている事実から裏付けされています。Asset Server導入前はgitを使っていたのですが、GUIクライアント付きでもトラブルだらけの毎日でした。これがAsset Serverになるやいなや全く教育もトラブルシュートもしないまま一日80コミット以上をコンスタントに記録するような素晴らしいバージョン管理体制が構築できたのです。
  • Unityのプロジェクトをバージョン管理するとき固有で発生するトラブルが一切ありません。まぁ具体的には先日書いた記事の通り、metaファイルなんですけど。前にも書きましたが、とにかくトラブルが発生しづらいです。簡単で単純なので。

■いけてないところ

さてもちろん良いところがあれば悪いところもあるわけで。以下のような点が問題点としてあげられます。
  • 高い
  • 高い
  • 高い
  • 高い
  • バージョン管理に必須とも言える機能が大幅に欠落しています。Subversion以下程度の機能しかありません。
  • 具体的にはブランチがない、タグがない、外部ツールがないのでJenkinsみたいないUnity以外から触ろうとすると超面倒くさいかPostgreSQLに直接SQL発行するしかない、基本コミットとアップデートとlog見てrevertするぐらいしかできることがないです。
  • みんなが一番期待するであろう、シーンやプレファブのマージですが、出来ません。一切できません。したがって作業範囲が衝突した時のトラブルはSubversionやgitと何ら変わりません。むしろスクリプトのマージを自動解決してくれるぶん、gitやhgのほうが優れています。
  • Unityのプロジェクト固有の問題は一切ないのですが、一般的なバージョン管理システム的にありえないバグが時々(週に1度程度)発生します。
  • 具体的にはファイルを変更したのに変更差分が認識されない(特にスクリプトを外部ツールでマージした際に顕著に発生)、updateしたのにローカルのファイルが古いまま、Historyから復元しようとしたら復元元のディレクトリが無いとか言われて復元できなくて死亡して愚痴愚痴愚痴愚痴愚痴...
  • 大人数で使うことを開発元が想定していないフシが多々あって、一番わかり易い例が最大同時接続数。これ最初の設定だと20人が限界です。PostgresのデフォルトがTCP接続40本までで、Asset Server Clientは1クライアントあたり2本TCPを貼るので。更に悪いことにこの設定を変更するにはPostgresSQLの設定ファイルを自分で操作する必要があります。簡単だからという理由で導入してここで躓いたチームは地獄を見る(むしろほぼ解決不可能になる)ことになります。
  • ところどころ完成度の低い機能があったりします。例えば既存リポジトリのコピーが可能なんですが、誰か一人でもどこかのリポジトリにクライアントが接続していたらコピーが出来ないと言われてしまいます。・・・えーと、全員帰った後にコピーしてくださいってことでしょうか><

■結論

Unity Asset Serverは、状況次第では非常に強力な選択肢になりえます。例えばチームメンバーのほとんどがバージョン管理システムを使ったことがないとか、グラフィックやサウンド担当の人が多くて彼らがSubversionやgitを覚えるのは不可能というとき、社内でSubversionやgitのサーバーを運用するノウハウがない少人数のチームのとき。こういう時にはAsset Serverの導入しさえすれば誰でも使える簡単さが大いに役立ちます。

しかしながらこの内容で1ユーザー5万円という値段はどう考えても暴利と言わざるを得ません。またできることが浅く、機能が少なすぎる弊害が簡単さによる生産性向上度をだんだん上回っていきます。とくにJenkinsと組み合わせる際の相性の悪さが辛いです。シーンやプレファブのマージができるのであればまだ5万円の価値はあったのですが・・・ということで、すでに他のバージョン管理システムを使えているチームでしたら、ぶっちゃけそのバージョン管理システムを使ったほうが良いと思います。


■こぼれ話

Unity Asia Bootcamp Tour東京で聞いた話など。まずGREE(というか@splhackさんの部署)はバージョン管理にgithubを使っているそうです。gitでは無理だと思っていたのですが、チーム全体の習熟度が高ければ問題なく回せるものなのかと感動しました。それからUnity Japanの大前さんにUnity Asset Serverに関する不満を申し上げたところ、やはりUnity側でもそのあたりは問題点として認識されているとのことでした。改善に期待するしかないですね><