Unity5 メモ5
- 動くキャラクターの頭上に体力ゲージを表示する
例えばSliderを使って体力ゲージを表現する場合、using宣言とメンバを追加し、以下のようにするとオブジェクトに追従するUIが実現できる
using UnityEngine.UI; // ... [SerializeField] Slider lifebar; // ... Vector3 v = Camera.main.WorldToScreenPoint(transform.position); v.y += GAUGE_Y_OFFSET; lifebar.transform.position = Camera.main.ScreenToWorldPoint(v);
複数のキャンバスを使う時のパフォーマンス向上策
Canvas生成時にデフォルトでついてくるGraphicRaycasterコンポーネントは、
UIをタッチしたかどうかなど入力を毎フレーム行っているので、
ゲージや数値を表示するだけの場合はこのコンポーネントを削除することでパフォーマンスが改善される。
一応、敵キャラクター全てにCanvasを持たせて各個UIを管理する方式でキャンバスの総数が20前後になっても、パフォーマンスの低下は見られなかった。CanvasのRender Mode
Screen Space - Overlay ... 画面に直接描画する形式で、カメラは不要。UIが必ず最前面に描画される
Screen Space - Camera ... 指定したカメラからPlaneDistanceで指定した距離にテクスチャがあると見立てて描画する方式
PlaneDistanceより前にオブジェクトがあるとUIが隠れる
World Space ... ワールド座標空間上に実際にオブジェクトがあるとみなして描画する方式。
UIをナナメから見たり、UIが3Dオブジェクトにめり込んだりといった演出がで
きる
cf. Unity - Manual: CanvasuGUIでボタンと一緒に後ろのオブジェクトが押されないようにする
EventSystem.current.IsPointerOverGameObject()
を呼び出してtrueが返ってきたら処理しないことによって実現できる。
↑はマウス入力用で、EventSystem.current.IsPointerOverGameObject(null)
として呼び出すとタッチ入力用になる。uGUIのフォントに綺麗なアウトラインを付ける
unity-vertex-effects
(ライセンス文を検索したところ、zlib Licenseで提供されていると見られる)スクリプトの実行順を変更する
Edit > Project Settings > Script Execution Order で現れたインスペクターに
スクリプトをドラッグアンドドロップするフォントを半透明で描画する
空のGameObjectにCanvas Groupコンポーネントを追加し、その子オブジェクトにTextを置いた上で、
Canvas Groupのalphaを変更する