はい、引き続きちょこちょこタワーディフェンスをつくっています。
今回はHPのゲージや、ダメージを表示するところをの説明でも・・・。
作ったものとしては
- 位置が変わっても位置が変わらずに表示される
- ダメージ、ゲージなどは位置に関係なくて前に描画される
- 距離が離れると非表示になる
こんな感じのものです。
カメラ構成
ヒエラルキーはこんな感じになっています。
メインのカメラはPlayerの下にあるカメラで、今回の3D空間上のUI表示用に
UI Root(3D)のカメラを使います。
UI Rootの方は2Dのメニュー(最前面)表示用に使います
さらにもう一つカメラがあってそれがMapの下にMap表示用のかめらがあるので
カメラは全部で4つ使っています。
- 3dUIカメラ:レイヤー 3DUIのみ表示 Depth:0
- 2dUIカメラ:レイヤー UIのみ表示 Depth:2
- マップ用カメラ:レイヤー Mapのみ表示 Depth:1
- Playerカメラ:上記以外のレイヤーを表示 Depth:-1
3dUIカメラはこんなような感じになっています
projectionはPerspective、Clippingでどれくらいはなれたら非表示にするかというのができます。
##早速表示
ゲージのprefabとダメージテキストのprefabをつくります。
ゲージはEnemyのクラスのStartとりあえず作成します。
親はUI Root(3D)のしたです。
普通に作成しているだけです。
位置などはUpdateで計算します
ちなみにゲージのクラスはこんな風になっています。
こちらがEnemyクラスのUpdateメソッドです。
死んだときと、HPが最大のときは非表示にしています。
位置を合わせているのはGetMainTo3DUIPosというメソッド。
下の方で説明します。
で、こちらが要のGetMainTo3DUIPosです。
メインカメラの座標を3dカメラの座標に変換しているところです。
このメソッドをダメージの表示のところでも使えばOKです。
EnemyClassのあたり判定部分
DamageTextに関してはこのクラスのUpdateで位置の計算をしたり、アルファ、移動処理をしています。
##最後に
今回はそれほどだいしたことをしていませんが・・・。
実はちょっとあきてきている・・・。
ちなみに現在は下図のような状態までつくりました。
簡単にUIをのせてスライムがクリスタルに向かってぞろぞろスポーンして向かっていくという・・・。
A*も乗りましたがいろいろ修正が必要かもな〜といったところ。
敵のAIとか〜経路探索がみんな同じ道とおっててなんだかつまんない・・・。
ここまでの作業時間はトータルで15時間くらいだろうか。
うん、アセットの力は偉大である。
ここまでではまったのが、クオータニオンとオイラーとかの回転・・・。
あとはUnity4からもってきたProjectorがバグっている件・・・。
Unity5のprojectorをインポートしなおしてshaderを差し替えたらうまく動いた。
これの解決に30分ぐらいついやした・・・。