スポンサーサイト 

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

[ --/--/-- --:-- ] スポンサー広告 | トラックバック(-) | コメント(-)

書籍「ゲームの作り方 Unityで覚える遊びのアルゴリズム」 

さて、前回までで2Dも一段落したので、書籍を1冊購入しました。
バンダイナムコの開発陣が作っただけあって実践的な1冊。

ゲームの作り方  Unityで覚える遊びのアルゴリズムゲームの作り方 Unityで覚える遊びのアルゴリズム
(2013/02/28)
加藤 政樹

商品詳細を見る


作者様のホームページにて、サンプルゲームを遊べますが、良くある説明用のゲームに比べてクオリティが高い。
その代わりに、それだけの物を1から説明するわけにはいかないので、書籍は要所要所の解説に留まっています。
しかし、プロジェクトファイルがDVDに入っているので、ある程度読める人なら十分。
心配な場合は、初歩的な入門書をやってから購入するといいかと思います。
(むしろおまけで付いている、社内勉強会資料が実用的で豪華だとか思ったりw)

0章の入門編をやっただけでも、徹底的なPrefab化、フォルダ分け、ゲーム性の細かい調整、
タグを使ったコリジョン判定など、実用的なコードなのが個人的にポイント高い。
webの入門サイトとかは基本的に一番労力のかからないやり方するので、実用性はまた別だったりします。

とりあえず0章の入門編が終わったので、時間見つけて他も読んで行きたい。
スポンサーサイト
[ 2013/11/24 23:22 ] 通常日記 | TB(0) | CM(0)

Unity 4.3 2D機能勉強 その2 

動画30分もあるんですが、半分以上はどうやってサンプルのゲームを動かしてるかの解説ですね。
細かいところは動画を見てください(というか、unity歴1週間程度ではやりながらじゃないと理解できない)
レイを飛ばして地面との当たり判定取ってたり、アニメーションの細かい設定とか面白そうな事をやっています。

さて、2Dの表示周りは出来たわけで、次は当たり判定をどう取るか。
これは基本的に3Dで使ってたやつの2D版が用意されています。
[Physics 2D]->[○○ Collider 2D]のコンポーネント
2Dなので、z座標は考慮せずに当たり判定を行うようです。

中でもPolygon Collider 2Dは自動でスプライトにあった当たり判定を作ってくれます。
(ただ、頂点数が増えるのでBoxとかCircleで済むものはそちらの方がいいはず)
ちなみに、自動で作られた結果が気に入らない場合、Shift押しながらカーソル合わせると頂点のマークが出ます。
unity_study006_ss.jpg
これをShift+左クリック押しながらで動かせます。
ラインの真ん中当たりに合わせると新しいマーカーが出て、頂点追加。
Shift+Ctrl+左クリックで頂点削除ができます。便利。

対応する関数もvoid OnCollisionEnter2D(Collision2D collision)みたいのが用意されています。


後は、キーフレームアニメーションにも対応しているようで。
今回のテクスチャがパラパラアニメみたいな1枚のテクスチャなんですが、それも含めて編集ができます。
まず、ProjectウィンドウからSpriteをクリックして、Sprite ModeをMultipleに変更。
するとSprite Editorというボタンが出るのでこれをクリックしてエディタを起動します。
unity_study009_ss.jpg

左上のSliceというメニューで画像を分割できます。
TypeをAutomaticでSliceボタン押したら良い感じにしてくれました。
Enemyスプライトの子要素としてEnemy_0~Enemy_8が追加され、それぞれのコマの画像になっていました。
単体で表示する場合は、Sprite RendererのSprite欄を変更すればOK。

で、アニメーションですが、[Window]->[Animation]からAnimationウィンドウを開きます。
unity_study010_ss.jpg

まずは、[Add Curve]を押して項目を追加します。
追加する項目はコンポーネントの項目ならほぼ何でもあって、画像はpositionとspriteを追加しています。
あとはキーを打っていく感じですが、一番上のボックスに数値を記入して時間指定したあと、対象の項目を変更すると勝手にキーが打たれるようです。
positionなんかはカーブエディタでの指定もできるので、デザイナーは色々できそうですね。

で、作ったAnimationをどうするかですが、Animatorというコンポーネントが勝手に作られています。
(ProjectウィンドウのAssetsにもAnimatorが作られています。)
unity_study011_ss.jpg

Animatorウィンドウは[Window]->[Animator]でもいいですし、AssetsのAnimatorダブルクリックでも起動します。
これは複数のAnimationを繋いで、速度等の設定をした上で再生できる物のようです。
(多分この辺は3Dのアニメーションでも同じなので割愛)
画像だと、Attackから始まって、次にNew Animationへ、それが終わるとまたAttackへというように動作します。


コリジョンとアニメーションだけでも盛りだくさんですね、書ききれないぐらい色々できると思います。
画像にあったコリジョンをつけて、Animatorで動かすところまでをデザイナーに作ってもらえば、分業も捗りそうですね。
スクリプトの中までは紹介しきれないので、2D機能の記事はこの辺にしておきます。

[ 2013/11/22 23:03 ] unity | TB(0) | CM(0)

Unity 4.3 2D機能勉強 その1 

思ったより動画を見ながら理解するの苦労しています。
英語聞き取れると大分楽なんだろうなーと思いつつも、まとめております。
良く分からない部分はいじりながら補完しているので、ミスもあるかも?

まず、今回追加された2Dビュー機能。
プロジェクト作成時に3Dか2Dを選ぶボックスが追加されていますので、2Dを選びます。
unity_study003_ss.jpg

この設定はプロジェクト途中でも、[Edit]->[Project Settings]->[Editor]の中の[Default Behavior Mode]や、
Sceneビュー上部の2Dボタンでも切り替える事ができます。
unity_study004_ss.jpg

さて、正式なやり方は分かりませんが、Projectウィンドウに適当な画像ファイルをドラッグすると、
そのまま登録してくれて、選択するとInspectorウィンドウのTexture TypeがSpriteになっています。
unity_study007_ss.jpg


このSpriteをHierarchyウィンドウにドラッグすると、プレハブと同じように生成できるのですが、
その中身を見るとSprite Renedererというコンポーネントが存在していて、Spriteに先ほどの画像が入っています。
(この時点で、既に画像はSceneビューに表示できていて、回転とかも好きなようにできます。)
unity_study005_ss.jpg

さて、ColorやMaterialは置いておいて、Sorting LayerとOrder in Layerが気になる所です。

Sorting Layer:レイヤーのグループを選択する(動画ではBackGround,Character,ForeGround等)
Order in Layer:同レイヤーグループ内でのソート順序を決める(値が大きいと手前に来る)

・Sorting Layerの追加
Sorting Layerのドロップダウンボックスをクリック->[Add Sorting Layer..]選択
Sorting Layersの+を押すと追加、-を押すと削除、適当な名前をつけて並べ替える。
(並び順が下にあるほど手前に来る)

・Sorting Layerのロック?
Unityウィンドウ右上のLayersから鍵のマークをクリックするとロックがかかります。
unity_study008_ss.jpg
で、これの効力なんですが…、良く聞き取れていません。。
ただ、Sceneビューで対象レイヤーのオブジェクトをクリックしても選択されないので、
どうしても重なる2Dが邪魔になるのを回避する効果があるのかなーとか思っています。
ちなみに、Hierarchyウィンドウからは選べますし、選んでしまえば編集もできます。

なお、Order in LayerはSorting Layer内でしか順番付けされません。Sorting Layerが親にいるイメージ。
個人的に気になってZ値をいじってみましたが、Sorting LayerもOrder in Layerも同じ値の時のみZ値でソートされます。
この辺は良くある描画システムと同じですね。

2D画像の表示とソートについてはそんな感じです。長くなっているのでこの辺で。
[ 2013/11/22 18:57 ] 通常日記 | TB(0) | CM(0)

Unity 4.3の2D機能を勉強 

ぶっちゃけこの機能を見てunity勉強始めたので、これはやっておかねばというお話。
ただ、まだリリースされたばかりで、あまり参考にするサイト等がありません。
なので、公式の情報を見ながらやりましょうか。

とりあえず公式から抜粋した更新内容。
・スプライトの自動接合機能で時間を節約
・2D アニメーションウィンドウでアイデアのイテレーション速度をさらに高速化
・次元の行き来も容易に:2D と 3D を組み合わせるのも簡単
・複数スプライトからのアニメーション自動生成
・リジッドボディ、ジョイント、カスタマイズ可能なコライダまで利用できる 2D 専用の物理演算システムを完全統合
・テクスチャーの自動アトラス生成(Pro 版プレビュー機能)
・アルファカットアウトでフィルレートの最適化も(Pro 版専用)


これだけ説明されても、いまいち良く分かりませんね…。
2D機能のワークフロー動画が紹介されてたので、これを見ながらやるのが良さそう(英語ですが)


英語はほとんど聞き取れないですが、作業を見ながらやれば問題なかろうという事で、少しずつ進めます。

[ 2013/11/22 17:25 ] unity | TB(0) | CM(0)

unity入門 終了 

unity入門の動画サイトをやり終えた。
とりあえず指示通りに作っているだけですが、よく使いそうな部分は分かってきました。

サイトを見ながら作成した、落ちてくるキューブを左右キーで取り続けるだけのゲーム。
取り逃すとゲームオーバーです。シーケンス繋いでないので読み込みなおしてください。
(Spaceキーで弾を撃つ機能を何となく追加、超バランスブレイカー)
http://www6.plala.or.jp/poro/unity/study001/Output.html
unity_study002_ss.jpg

ゲームと呼ぶにはかなりシンプルな物ですが、このレベルでもサクッとできるのはいいですね。
Rigitbodyをコリジョン用に使っていますが、この辺自動化されているのはかなり楽。
商品レベルの物を作るには色々苦労もありそうですが、いきなりゲーム部分が触れるのが大きいと思います。
コリジョンシステム作るだけでかなり時間取られて、気力が萎えるパターンはゲーム製作あるある。


<思った事>
・UnityってTranslateとRotate関数用意されているのにScale系はないんですね。
 - JavaScriptだとtransform.localScale.x = 1.0f;とか書けていいんですが、
  C#だとtransform.localScale = new Vector3(1.0f, transform.localScale.y, transform.localScale.z);
  1変数書き換えたいだけなのに大げさな感じ。
  もっと良いやり方が無いか、おいおい調べたい。(localScale.Setはなぜか反映されなかった)
・もしかして、new多すぎ・・・!?
 - C#ってnewしまくりますね、こういうものなんでしょうか。
  他のサイト見てもそんな感じなので、とりあえずは流儀に従う事に。

<自分用メモ>
・スケールの減算
 transform.localScale -= new Vector3(Random.Range(0.1f, 0.5f), 0.0f, 0.0f);

大分新しく得る物がなくなってきた(=初歩が身についてきた)ので、次は何をやろうか考えます。
[ 2013/11/21 20:45 ] unity | TB(0) | CM(0)

Unity入門 続き 

全26回中13回まで行っていたので、残りも進めていきます。
段々、実践的な内容が増えてきて嬉しい限り。
Prefabの動的生成やシーン遷移はゲーム作る際に必須だと思うので覚えて行きます。
ちなみに動画のスクリプトはJavaScriptですが、C#に書き換えてやっています。
とりあえず23回まで進んだので明日には何かできるはず。


<C#でそのまま出来なかった事>
・transform.position.z += 0.1f;が出来ない
 - private変数へのアクセスになると思われるので、Translate関数を使う。
 - vectorの代入はtransform.position += new Vector3(0,0,0.1);とすれば可能
・コリジョン定義関数
 - private void OnCollisionEnter(Collision collision)になる
・GUIテキスト関数定義
 - void OnGUI ()
・GUIラベル設定のRectにはnewが必要(というか基本的にVector3含めオブジェクトはnewで生成する必要がある)
 - GUI.Label (new Rect(10, 10, 200, 50), "Game Over", m_Style);

<自分用メモ>
・オブジェクト生成
 public GameObject m_Ball; ←Publicで作ってInspector上でオブジェクトを入れる
 Instantiate (m_Ball, transform.position, transform.rotation); ←これで生成
・GUIテキスト挿入
 public GUIStyle m_Style; ←Inspector上でフォントサイズ等設定する。
 void OnGUI () {
  GUI.Label (new Rect(10, 10, 200, 50), "Game Over", m_Style);
 }
・シーンの遷移
 [File]->[Build Settings...]でシーンを追加する必要有り。
 ※ここでの順番を間違えないように、MainとGameOverならMainが上に来るように。
 Application.LoadLevel("シーン名");
・フレーム数のカウンター
 Time.frameCount
・ランダム値取得
 Random.Range(-5.0f, 5.0f)
・ポジション移動での挙動の違い
 transform.position -= new Vector3(0.0f,0.0f,0.2f);
 transform.Translate(0.0f,0.0f,-0.2f);
 同じに見えるけど、前者は位置情報に直接入れているけど、後者は行列を掛けているっぽい?
 回転を入れると挙動が変わるので、ちょっと微妙な感じ。
 問題はRotateとTranslateの順番に関係なく挙動が変わるのでposition -=を選ばされる事。


[ 2013/11/20 23:59 ] unity | TB(0) | CM(0)

次はUnity入門の動画サイトで 

Unity入門という動画で説明しているサイトがありますので、そちらをやります。
http://dotinstall.com/lessons/basic_unity

1回あたり3分での説明なので、割と手軽にできます。とりあえず13回ぐらいまでやりました。
公式HPのチュートリアル終了後ですが、それなりに発見もあって良いサイトだと思います。

特に貼る画像はないんですが、動画ではこんなサンプル作りますよ的な物。
unity_study001_ss.jpg

この雪だるまがプレハブ(Prefab)化されているわけですが、これかなり使いそうですね。
テンプレートというか、Photoshopで言うとスマートオブジェクトがほぼこれな感じ。
プレイヤーにしろ、敵にしろ、ゲームに出てくる単位で全部プレハブ化してもいい気がするな。

あとは、他のエディタを使う話があったので、VisualStudio使えないかと思ったのですが、2005は古すぎてダメっぽい。
2012 Expressでは以下のサイトの方法でいけるようなので、MonoDevelopに不満が出たらやってみよう。
http://unity.creator.ms/unity-018.html



<個人的メモ>
・Assetsは共通リソース、プロジェクトに紐づくのでシーン間で使いまわせる。
・[GameObject]->[Align With View]->現在のSceneでの見た目になるようにカメラを動かす
 - ライトでもいけた。
・デバッグログ出力
 Debug.Log("文字列");
 ※C#って+で文字列繋げるんですね…、C++と比べてこの辺はかなり楽。

[ 2013/11/20 17:28 ] unity | TB(0) | CM(0)

はじめてのUnityやってみた 

まずは公式にある、はじめてのUnityから触る事にしましょうか。
http://japan.unity3d.com/developer/document/tutorial/my-first-unity/
(残念ながらまだ第1回しか完成していない模様)

unityについては右も左も分からないので、極力簡単な物から入った方がいいはず。

C++に慣れているため、いきなりGUI的に画面を作ると色々混乱するのだけれど、
要するに今画面に出ている物がゲーム中の1シーンとしてファイル保存単位になる模様。
シーンを複数組み合わせて1プロジェクトを作る、と。

載ってる内容以外にも色々調べながらメモりながらでも2時間程度でチュートリアルは終了。
感想としては、ざっくり作るのには便利だけど、ゲームとして色々調整するには慣れが要りそう。
そしてMonoDevelopが日本語対応できていないのが痛い…(一応入力だけはできるけど)

ちなみに作ったやつはこんな感じで動作します。(要UnityPlayer)
http://www6.plala.or.jp/poro/unity/study000/Output.html

Unity ブロック崩しスタディSS

キーボードの左右もしくはA,Dで動きますが、物理挙動でたまに変な動きしますね。
壁との間に挟んだりするとすごいスピードで吹っ飛んでボールがなくなります…。
ここまでシンプルだと、物理要らないんじゃないかという気がしなくもないけど、コード書く量は増えるだろう。



<チュートリアル補足>
・スクリプトの追加でインスペクターパネルにドラッグ&ドロップとあるが、下の方(Add Componentボタンの下辺り)じゃないとダメ。(一度決定するとその名前でクラスが作られて割と悩んだ)
・C#で書く場合、クラス名とスクリプト名は一致させる必要有り。
 後は変数定義をfloatに書き換えるだけで動いた。
・書かれてないけど、ラケットにもRigitBody追加しないと当然ダメ。

<個人的メモ>
・右クリック押しながらASDWでカメラをFPS移動
・[GameObject]->[Create Empty]でEmptyオブジェクトを作って、ドラッグ&ドロップで親子付け可能。
 - Emptyオブジェクトも適当な座標に配置されるので、親子付け前にTransformをReset推奨。
・MonoDevelopエディタの配色が嫌いなら、[Tools]->[Options...]の[Syntax Highlighting]からVisualStudioとか選択できる。
[ 2013/11/19 19:20 ] unity | TB(0) | CM(0)

unity始めてみました。 

大体5年ぶりの更新となりますが、unity始めました。
http://japan.unity3d.com/

ちょっと前にやった時は、無料版では色々できない事も多くて微妙だったんですが、
最近大分色々入ってきたようですね。

・Android,iOSへの出力可能に
・リアルタイムシャドウが使用可能に
・2D関連の機能追加


と、何か色々作れそうな気がしてきました。
uGUIというGUI特化の物も計画されているようで、流石にそろそろ勉強しないとな、と。
個人的に楽しみなのはShuriken(パーティクルシステム)なんだけども。

とりあえずチュートリアル的なサイトや書籍が出ているので、それをやりつつ軽くまとめて行きたいと思います。

[ 2013/11/17 20:55 ] unity | TB(0) | CM(0)
プロフィール

poro

  • Author:poro
  • プログラマやってる人です。
    絵とかも好きだったり、
    何か作りたいとか最近考えているらしい。
ブロとも申請フォーム


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