Programming Serendipity

プログラミングを中心に種々雑多に書き留めます

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: Canvas

  • uGUIでボタンと一緒に後ろのオブジェクトが押されないようにする
    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を変更する