スポンサーサイト 

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

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

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機能を勉強 

ぶっちゃけこの機能を見て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)
プロフィール

poro

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


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