主なコンテンツ

〜主なコンテンツ〜

1. Unityで製作したゲームと製作Tips
  1. 三月精チャレンジ(東方Project二次創作)
    1. 作り方
  2. 英語学習2D(オリジナルスマホアプリ)
2. UE4
3. ゲームアプリ見学
4. Bitbucket & SourceTreeでの一連の流れ
  1. 前半
  2. 後半
5. Tips
  1. UnityのTips
  5. SQL文のTips
  6. Final IK
  7. GearVR+Unity

2016年3月10日木曜日

ゲームを管理するクラス作りとuGUIによる可視化【三月精チャレンジ】

■ゲームを管理するクラスについて

  • ここでいうゲームを管理するクラスとは、プレイヤーの挙動とは別に、ライフや時間といったゲームの進行を管理するクラスのことである
  • Instantiateで呼び出すこと前提のプレハブは、呼び出されるまでHierarchyの情報を参照できない。そのため、「弾丸が当たった時ライフを1減らす」といった処理をするためには、ゲームを管理するクラスをFindWithTagなどで見つけ出す必要がある。
  • 今回はManagerクラスを集約したゲームオブジェクトを一つ作り、このオブジェクトにManagerタグをつけた。これにより、複数のManagerクラスを1つのオブジェクト、1つのタグだけで管理できるようにした。
  • 敵の遠隔攻撃①」や「アイテム」で紹介したスクリプトなどもFindWithTagでManagerタグから必要としている管理クラスにアクセスしている

■uGUIによる可視化

  • uGUIとはUnity4.6から実装された、Unity独自のGUI(Graphical User Interface)のことである。Unity4.6以前は、有志の開発したnGUIが推奨だったのでそれと区別するためにuGUIと呼ばれる。
  • 今回、タイトル画面やゲームオーバー画面はCanvasの子オブジェクトとして作成し、このオブジェクトのアクティブを切り替えることで表現している
  • Canvasの子要素はTransformではなくRectTransformとなっており、アンカーと呼ばれる概念が追加されている。これは親オブジェクトのどの位置をPivotの位置にするかというものである。これを利用することで矩形の計算が楽になるほか、解像度が変わってもレイアウトを崩れにくくすることができる。
  • Pivotはどの位置をRectTransformの原点にするかというものである。値の範囲は0~1である。(0, 0)なら左下、(0.5, 0.5)なら中央、(1, 1)なら右上である。これだけ見ると何が何やらといった気分になるが、要はxy座標系の位置で考えている。例えば、左上を原点にしたい場合はPivotを(0, 1)にすれば良い。
  • Canvasはシーンビューでは巨大に表示される。そういうものなので驚かないこと。また、シーンビュー及びゲームビューに表示されるCanvasの大きさは、現在表示しているゲームヴューの大きさに連動している。640x480の画面ではどうなっているかなどを確認したい場合は、ゲームビューをその大きさにするか、その大きさを入力したオブジェクトを作って要素を中に入れるか、ゲームを再生して確かめことになる。
  • uGUIをスクリプトで扱う場合は名前空間(NameSpace)にusing UnityEngine.UIが必要になるので忘れないこと!(
  • 今回作ったCanvasの中身は次のようなもの

  • 今回作った画面は次のようのもの

■スコアとタイム

  • スコアとタイムは共にManager側で数値を管理し、テキストを書き換えている(参考:スコアタイム
  • 矩形の計算が煩雑なので、テキストにはContentSizeFitterコンポーネントをアタッチしている

■ライフ

  • スクリプトは こちら を参考のこと
  • ライフを示すハートの画像は初めから8個用意しておき、不要な分は非アクティブにしている
  • Colorは不透明なものと半透明なものを初めから用意しておき、これを切り替えることでダメージ・回復を表現している。なお、Colorクラスは一部の値だけを変えることができない。そのためnew Colorで書き換えるか、今回のように差し替えるか、もしくはVector3のように加減算することになる。当初はα値の加減算で表現していたが、Colorは0~1以外の値も持ててしまうので不具合が多かった。(参考記事
  • LayoutGroupを活用している。ハートの配置はHorizontalLayoutGroupを使い、さらにこのハート群と「じょうげん:8」の文字の配置にはVerticalLayoutGroupを使っている。矩形の計算をしなくて済むので便利。


■GameOver画面のノウハウ

  • Animationを利用している(参考
  • アニメーション後の配置をシーンビューで見れるようにしたかったので、当初は最終的な配置の状態で描画系を非アクティブにしておき、Animationの0.1秒目で配置をアニメーションの初期値に移動させ、0.2秒目で描画系をアクティブに戻すようにしていた。ただし、これだと解像度の変更に対応できない。結局、初めからアニメーション前の配置にしておき、アニメーション後の配置を見たいときはアニメーションを再生することにした。
  • uGUIにおけるCanvasの要素はHierarchyの順に描画される。今回はスコアだけGameOverの背景の上に表示されるようにした。
  • 吹き出しは9 Sliceという機能を利用している(参考:公式動画の1:50から)。今回のように丸みのある複雑な画像でも、1ピクセルをひたすら引き延ばすというという荒技が使える。



0 件のコメント:

コメントを投稿