UGJ2nd(UnityGameJam2nd)に参加しました

チーム組んで、Unity使って、30時間かけてゲーム作ろうぜというイベントです。
「ゲーム制作に興味のあるドMの集まり」みたいなイメージでたぶんあってます。(要出典)

UGJ2nd 参加募集ページ
http://www.zusaar.com/event/306053

会場は、秋葉原デジタルハリウッド大学の3部屋ぶちぬき。

僕が配属されたチームHは、当初3名で、最終的に5人でゲームを制作しました。
「たまご屋」というチーム名の由来は、昼食で卵かけご飯がウリの定食屋さんに行ったためです。
Oh! saka Bar たまごん家 秋葉原UDX店

まずはどんなものが出来上がったのか以下のページで見てみてください。

UGJ2nd 全チーム成果物ページ
http://c8bkz3-ay9-app000.c4sa.jp/

チームH成果物ページ
http://c8bkz3-ay9-app000.c4sa.jp/h/

プログラムできる/やりたい人が多かったので僕はモデリングを担当しました。
ですので、コード1行も描いてません。
普段はWEBプログラマとして仕事しているので、終始グラフィッカー(?)として作業できたのは新鮮な体験でした。

使ったツール はBlenderとSAI。

ゲームに登場するキャラクターモデルを組み合わせて、以下のようなタイトル画面を作ってみたり。
こういう時にとりあえずAmbientOcclusionをONにしておくと見栄え良くできるのでBlenderは便利ですね。

以下、反省点など。

  • 背景オブジェクトを作る経験が無さすぎた
    • よく考えたら建物をモデリングしたことがありませんでした。そのため、どう手をつけていいかわからず、最後まで作業を先延ばしにしてしまいました。
    • 建物を作らなくてもいいステージ設計にするか、事前に練習しておけば良かったかもしれません。
  • 主人公キャラに時間をかけすぎた
    • どうせプレイ中には後ろ姿しか見えないので、もっと手抜きしても良かったように思います。
    • とはいえ、ある程度細かく作っておいたことで、さきほどの画像のような事に使い回しができたので、無意味では無かったはずです。
  • 寝具を持ち込むか、近場のネカフェで寝ればよかった
    • 当初は電車があるうちに家に帰って寝ようかと思っていたのですが、実際には寝る間も惜しんで開発にあたらないと形にならないので、結局デジハリのラウンジと呼ばれる場所で雑魚寝することに。
    • その眠りの質を上げれば次の日のがんばり具合も変わってくると思うので、次に参加する時にはどうにか改善したいです。

とまぁ「もっとこうしておけば」的な事柄は尽きませんが、とても興奮できる30時間でした。

参加して良かったこと?それは参加すればわかる!

というわけで
「チームで作る楽しさを味わいたい」
「自分や他人の実力を知りたい」
「そもそもゲーム制作が好き」
という方はぜひ一度参加してみてはいかがでしょうか。

おまけ:
僕が担当した3Dモデル、アニメーション、テクスチャなどのファイルをzipにまとめました。
お好きなように見て使ってください。
https://www.dropbox.com/s/0o8dd4hzytvwe8p/UGJ2_models.zip

javascriptでマウスポジションを取得した時、ChromeはFirefoxよりラグが大きい気がする

Windows 7で、FirefoxChromeを比較してみた。

Windows 7Chromeだとカーソルの遅れがひどい。

動画には登場してないけど、Windows XPだとそこまで気にならない。

ブラウザ上でお絵描きする人はぜひ一度比較してみてください。
だいぶ描き心地が違います。

Unity

PSEYEみたいな事ができるか?

カメラ入力→画像認識→インタラクション

そのbitmapにどうアクセスできるか調べる

WebCamTexture.GetPixel

WebCamTextureもGetPixelメソッド使える

ResizeがしたいのでWebCamTextureからTexture2Dに変換,copyしたい

Copy Paste multiple Texture2d's Into New Texture2d
http://answers.unity3d.com/questions/144240/copy-paste-multiple-texture2ds-into-new-texture2d.html

textureはピクセル情報をいじったらapplyしないといけないらしい

Texture2D.Apply
http://unity3d.com/support/documentation/ScriptReference/Texture2D.Apply.html

コピーできた!

var colors : Color[] = sourceTexture.GetPixels();
texture.Resize(sourceTexture.width, sourceTexture.height);
texture.SetPixels(colors);
texture.Apply();

renderer.material.mainTexture = texture;

Resizeは実行するとピクセル情報がリセットされる(空になる)

ダメじゃん...

TextureとTexture2Dの違いって何だ?

基底クラスと派生クラス

とりあえずグレースケールにしてみる

Shaderでできた
http://answers.unity3d.com/questions/31823/how-do-i-make-a-texture-turn-greyscael.html

直前のbitmapとの変化を調べるには?(未達成)

GLクラスが使えるかもしれない
http://yasakawa.blogspot.jp/2011/10/unitytexture2d.html
http://unity3d.com/support/documentation/ScriptReference/GL.html
プラグインでネイティブのコード叩くとか

感想

ActionScriptのBitmapDataに相当するクラスが欲しい

第5回 UnityのためのCGとか勉強会 個人作業内容ログ

メモそのまんまでごめんなさい。

参加した勉強会はこちら(スタッフを兼ねてるので参加者一覧には居ません)
第5回 UnityのためのCGとか勉強会
http://atnd.org/events/26817

JSON整形Bookmarklet

最近、JSONを返すAPIを作っていて、そのドキュメントを書く時にJSONが整形されてると読みやすいのでそうしてる。
というかJSON整形されてないと読めない。

そのためにこれまではJSON整形サービスを使っていたけど、未公開の情報を外に送信するのは気持ち悪い・危ないのでBookmarkletにした。

ChromeJSONの結果が表示されている状態で以下を実行。

var pre = document.body.getElementsByTagName('pre')[0],
str = JSON.stringify(JSON.parse(pre.innerHTML), null, '    ');
str = str.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#039;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
document.body.innerHTML = '<textarea style="width: 100%;height: 100%;">' + str + '</textarea>';

JointのBreakForceでキュゥべえの首をもげ

2012年1月7日に行われた第3回 UnityのためのCGとか勉強会@Moyashipanが発表した内容です。

デモ

マリオ64の起動画面でマリオの顔をいじれるのがありましたよね。
ああいうカーソル操作でキャラクターをいじれるコンテンツを作りました。

デモ: キュゥべえもぎもぎ

要FlashPlayer11です(Unity3.5DeveloperPreviewのFlash書き出しを利用しているため)

制作期間

夜にコツコツと進めて、モデルを作るのに3日ぐらい、作り方を調べて操作部分を作るのに1日ぐらいかかりました。

制作手順

モデルを作ります

リグを仕込みます

Unityにモデルを読み込みます

クリッカブルエリアとなるCapsule(CapsuleCollider)を、モデルとだいたい同じ位置・サイズに設置します。
(ずっとコリダーと読んでいたのですが正しくはコライダーなんですね @shinriyoさんありがとうございます)


説明を簡便に済ますために今回はBodyとHeadのみColliderを設置しました。
(Bodyはめり込んでてわかりにくいですが、見やすいように赤いMaterialを設定してあります。)

Play時にCapsuleが落下してしまわないように、とりあえずUse Gravityをoffにしておきます。

GameObject>Create Emptyで空のGameObjectを作成し、モデルとCapsuleをその中に含めます。

そのGameObjectにRagdoll ゾンビを動かす | Unity | M3 creatorで紹介されているコンポーネントを追加します。
(「unity ragdoll drag」でググると同様のエントリが見つかります)

Playしてみると、ドラッグで各Capsuleを個別にドラッグできるようになりました。

このままだとBodyとHeadがつながっていない状態になってしまうので、Jointが登場します。

HeadにFixedJointを追加して、Fixed Joint>Connected BodyにBodyを指定します。

FixedJointを設定すると、まるで親子関係になっているかのように2つのColliderを連結することができます。

Playしてみると、ドラッグ時にもう片方のColliderがついてくるようになりました。連結されてますね。

ただしこの状態だとドラッグするたびに全体があちこちに移動してしまうので、BodyはIs KinematicをONにしておきましょう。
これで頭だけをグイグイ引っ張れるようになりました。

ここまででColliderによるドラッグ時の操作が用意できたので、そこにモデルのArmatureを紐付けましょう。
(今回動くのは頭だけなので、HeadのみでOKです)


あくまでも座標の集まりではなく、各ArmatureをColliderの子にします。

Playしてみると...やったね!ドラッグでモデルが動くよ!

(もうColliderを目立たせる必要がないのでMeshRendererを非表示にしました)

ただしこのままだとタイトルにあるように首をもぐ事はできません。
そこで設定すべきなのがJointのBreakForceです。
Infinityになっている部分を数値に変更して調整します。

Playしてみると...そぉい!もげた!

最後にHeadのUse Gravityをonに戻せば、もいだ後に落下する首の完成です。

Jointには他にも種類があるので、各部位にあわせたものを選んで、同じように設定するといいですね。

まとめ

Colliderをドラッグするコードを追加して、Jointでつないで、もぎたいならBreak Forceを設定する。

今回はColliderを作ってからモデルのArmatureを子にするという方法をとりましたが、モデルのArmatureに対してColliderを設定する方法でもやりたいことは実現できると思います。

自分が作ったモデルで手っ取り早く「触れる」コンテンツを作りたい場合には良い方法だと思いますので、
みなさんも先輩魔法少女の首がもぎちぎられたり、友人のソウルジェムをもぎ捨てたりするコンテンツ作成にご活用ください。



それではごきげんよう