--------

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2012-01-23

【Unity】ぴーちゃんゲームを開発してみる4

Unity[http://unity3d.com/japan]
QuadUI[http://blog.equals-equals.com/quadui]
SpriteManager[http://www.unifycommunity.com/wiki/index.php?title=SpriteManager]
作成中のゲーム(最新版)[ぴーちゃんのゲーム」 ルールはクリックすれば火が飛んでくのでそれを鶏にあてるだけ!

今回の更新では、残り時間バー(見た目だけ)の配置とスコアの配置、いろいろアニメーションの追加をしてみました。
あと、まだ何もしないけどお店の配置をしてみました。
どうやら鶏に火を当てると上手に焼けましたって感じでフライドチキンになってお店に届くらしい?
テストでプレイしていてヒヨコが鶏を消毒する様がシュールな笑いを誘います。

自分の環境でWebPlayerを作成してFirefox上でテストする分には問題が無かったのですが、
他のPCの他のブラウザだとどうやら残り時間バーとスコアの表示がおかしくなるようで、この辺調査が必要そうです。
まさかUnityのWebPlayerが一部のブラウザに対応していないってことは無いと思うので
なんとなくゲーム画面のスクリーンサイズの比率が関係しているような気がしてます。

あとネットで調べてたらHPバーなどのゲージ系UIに使えそうな記事がありましたのでメモとして張ります。
このテクニックはどこかで使えそうな気がしました。
http://forum.unity3d.com/threads/42813-Health-Bar-UI

theme : ソフトウェア
genre : コンピュータ

2012-01-23

【Unity】ぴーちゃんゲームを開発してみる3

Unity[http://unity3d.com/japan]
QuadUI[http://blog.equals-equals.com/quadui]
SpriteManager[http://www.unifycommunity.com/wiki/index.php?title=SpriteManager]
作成中のゲーム(最新版)[ぴーちゃんのゲーム」 ルールはクリックすれば火が飛んでくのでそれを鶏にあてるだけ!

QuadUIのQuadUIEditerから作成したオブジェクトの場合、Quad2Dってクラスでスプライトの制御をしていますが
どうやらQuad2Dではピクセルサイズの設定ができないようで、どうにかしようにもクラスがSealedになっていて拡張できないのでSpriteManagerも試して見ることにしました。

導入方法はこんな感じらしい。
1.新しくEmptyなGameObjectを作って、それにSpriteManagerかLinkedSpriteManagerを設定
2.スプライトに使用するpng形式のテクスチャーをインポート
3 Materialを追加して2のテクスチャーを設定、シェーダーをParticles->Alpha Blendedに設定。
4 1で作成したオプジェクトのSpriteManagerに3のMaterialを設定
5 AllocBlockSize(最大表示数)を設定

 1のGameObjectに当たるのが[SPM_Number]
20120123_00.png
 2、3の設定がこんな感じ
20120123_03.png
 4,5がこんな感じ、AllockBlockSizeの数だけメモリを食います。
20120123_01.png


実際にスプライトを使用する場合は
1.実際にスプライトを制御ためのGameObjectを作成
2.1で作ったGameObjectにスプライト処理用のスクリプトを追加
3.2で作ったスクリプトに先程作ったSpriteManagerを取得する処理を作成
4.2で作ったスクリプトのStart()に3で取得しておいたSpriteManagerのAddSprite関数でスプライトを追加
5.4で作成した際に、Spriteの実体が返ってくるのでそれを受け取ってスプライト制御処理を作成

 こんな感じでうまくいきました。 managerは最初に作ったSpriteManagerをインスペクタ上で設定しています。
20120123_02.png

あとは、Updateでスプライトの処理を書けばうまくいくっぽいです。
少し使って見て、SpriteManagerのほうがQuad2Dよりリッチな機能を持っていて
複数のスプライトをひとつのオブジェクトで制御できるので処理も軽いってことが分かりました。
ただ、QuadUIEditerが結構便利なので、簡単なものはこっちで複雑な処理はSpriteManagerって形で
どうにかハイブリットでやっていきたいと思いました。

theme : ソフトウェア
genre : コンピュータ

2012-01-18

【Unity】ぴーちゃんゲームを開発してみる2

Unity[http://unity3d.com/japan]
QuadUI[http://blog.equals-equals.com/quadui]
作成中のゲーム(最新版)[ぴーちゃんのゲーム」 ルールはクリックすれば火が飛んでくのでそれを鶏にあてるだけ!

引き続き作業・・・

今回はオブジェクトの親子関係の構築と
画面外にオブジェクトが移動した場合に自動で削除する機能を実装してみました。

オブジェクトの階層関係はこんな感じに

ひえらるきー


InrangeManagerってのは子のオブジェクトが画面外に移動したら自動的に削除する機能を持っています。
敵キャラとプレイヤーの弾(火)をこのオブジェクトの子として作成することで
親となるInrangeManagerから監視可能な仕組みにしてみました。
今後画面内を移動するオブジェクトを作る場合は移動処理だけ作ればよいので楽になりそうです。

前回、UnityではUVの指定ができないとか書きましたが
QuadUIのソースを見ていたら、普通にスクリプトで処理を書けばできることが分かりました。

方法としては、まずクアッド(2ポリゴン4頂点)なメッシュデータを用意して
MeshFileterに設定、その後スクリプトで4頂点分のUV座標を
MeshFilter::mesh::uvにセットしてあげれば変更できます。
128*128サイズのテクスチャの左上から64*64を貼り付ける場合はこんな感じになります。

var meshfilter : MeshFilter = gameObject.GetComponent( typeof(MeshFilter) );
Vector2[] uv = new Vector2[4];
uv[0] = new Vector2(0.0,0.0);
uv[1] = new Vector2(0.5,0.0);
uv[2] = new Vector2(0.0,0.5);
uv[3] = new Vector2(0.5,0.5);
meshfilter.mesh.uv = uv;

とはいっても、スプライトの手法としてはネットに洗練されたものが
わりと転がっているのでそれを使用するのが手っ取り早いですね。
自分は今のところQuadUIを使用していますが、
SpriteManagerっていうUnityコミュニティの有志が作成したスクリプトがあるので
それを使うのもよいかもしれません。

SpriteManager:
http://www.unifycommunity.com/wiki/index.php?title=SpriteManager

調査中なので後ほどまとめようかと思っていることですが
Unityに標準でついているGUITextureでも2Dゲームは作れますが
これはドローコールと呼ばれる描画コストが非常に掛かるので
↑のサイトにも書かれていますが、スマホ向けとして開発する場合は
GUITextureを使用するのは禁止したほうがよいと言われています。
ドローコールの回数はパフォーマンスに直結するので
スプライト機能を使用する場合は定石としてネットに転がっているものを
使用するのがよいかと思います。

興味があるので、ネットにあがってる複数の手法でのパフォーマンスの違いを
今度調べて見ようかと思っております。

theme : プログラミング
genre : コンピュータ

2012-01-15

【Unity】ぴーちゃんゲームを開発してみる1

Unity[http://unity3d.com/japan]
QuadUI[http://blog.equals-equals.com/quadui]
作成中のゲーム(最新版)[ぴーちゃんのゲーム」 ルールはクリックすれば火が飛んでくのでそれを鶏にあてるだけ!

Unityで2Dなゲームの「ぴーちゃんゲーム」を作成しています。
サポートツールとしてQuadUIを使用しています。

「ぴーちゃんゲーム」のルールは、ボタンを押すとひよこが火を飛ばすので
空を飛んでる鶏とかなんかに当ててスコアを稼ぐゲームみたいです。
ミサイルに当たるか時間切れでゲームオーバーになるっぽいです。
もともとは友人が開発した携帯向けのゲームでして、今回チュートリアルも兼ねてUnityに移植をしています。

まず、開発を始めるためにQuadUIをUnityのプロジェクトにインポートすることから始めました。
そしてQuadUIの目玉だと勝手に思っているテクスチャ切り出し+αツール(QuadUIEditer)を
使用して、「ぴーちゃん」で最低限必要な要素の「プレイヤーキャラ(ぴーちゃん)」、
「敵キャラ」「火」を作成してみたのですが、なんかうまくいかず
背景色が表示されたままの状態で表示されるようになってしまいました。

最初は透明色の指定でもできるかと思って調べてみましたが、
QuadUIではアルファ値で透過させる部分を指定する方法を採用しており
QuadUIに標準でついてきたシェーダー(2DBackfaceCulled)を設定したマテリアルを作って
そこから切り出すことでいい感じにぴーちゃんらが表示されるようになりました

必要な要素が用意できたので、それらをそれっぽい感じに配置し
敵キャラ生成処理と火生成処理、それらの行動処理を作成しました。
あとは当たり処理をつければ最低限のゲームにはなるので
それはUnityで勝手にやってくれるコリジョン処理にお願いすればOK!
いい時代になったものだなぁと感傷に浸っていましたが
当たりを判定した際にシステム側からコールバックされるイベント処理(OnTriggerEnterとか)
がまったく呼ばれる、ここまでの作業時間のほとんどはこの問題解決に費やされました。

結論から言うとこれはUnityの仕様で
コリジョン(XXXColliderのコンポーネント)同士の衝突判定をするためには
それを行うオブジェクトに剛体(ragidbody)のコンポーネントがないとダメってことでした。
更に、QuadUIEditerで作成したオブジェクトには標準でMeshColliderのコンポーネントがついてきますが
このMeshColliderをもつオブジェクトにragidbodyを追加するとエラーとなります。
どうやらragidbodyの仕様上、3次元の厚みを持たないCollider(x,y,zのいずれかに0が設定されている場合)
物理演算が行えないってことでエラーとなります。
なので、Colliderを使用してUnityでやってくれる衝突判定の機能を使う場合は
QuadUIEditerで作成されたオブジェクトのMeshClliderをBoxColliderなどに置き換えて
さらにragidbodyを追加してあげる必要があります。

そんなこんなで何とか最低限の機能がつけられたので
UnityのBuildターゲットをWebPlayerにして作成してみたのをあげてみました。
記事のトップにURLを張っておきましたで興味があるかたはどうぞ。
ちょこちょこ機能を追加していこうかと思っております。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。