2014年2月2日日曜日

Unityで文字の表示

Unityで文字の表示についてメモ。

画面中の3Dモデルと位置合わせして文字を表示する際に検討した。

■2D文字

【サンプルメモ】

  1. void OnGUI() 内で描画を行う
    毎フレーム呼び出される。
    毎フレームごとにクリアされるので、再描画必要。
  2. 固定文字などの部品が利用可能(ボタンなどもありお手軽)。
  3. 異なる解像度のデバイスで使いにくい。
    文字サイズ指定値はピクセル依存する。
    同じ文字サイズ指定でも解像度が高いデバイスでは小さく描画され、低いデバイスでは大きく描画されるようなことが起きる。


/*
 * @file StringOnGUI.cs
 * @attention 
 * @note  GUI文字サンプル
 */
using UnityEngine;
using System.Collections;

public class StringOnGUI : MonoBehaviour {

 GUIStyle labelStyle; //!< GUIフォント表示用スタイル 
 /*!
  *  Unity標準関数
  *  OnGUI()
  *   @GUI文字描画はここで行う
  */
 void OnGUI(){
  float x = Screen.width / 8 ;
  float y = Screen.height / 8;
  string text = "Test String";
  text = string.Format("Physical Screen Size\nWidth={0}  Height={0}", Screen.width, Screen.height);
  GUI.Label(new Rect(x, y, x, y), text, labelStyle);
 }
 /*! Unity関数
  *  Start()   */
 void Start () {
  labelStyle = new GUIStyle();
  labelStyle.fontSize = 24;// Font size
  labelStyle.normal.textColor = Color.white;
 }
} 



■3D文字

 公式ドキュメント: テキストメッシュ

3D扱いのメッシュ文字。

  1. Text Meshはコンポーネント。
  2. なんらかの器=GameObjectが必要。そこにコンポーネントとして付与する。
  3. Text Mesh自体は「テキスト」の各種属性を持つが、位置情報を持たない。
  4. 位置情報は器(GameObject)が持つ。
  5. 3D空間座標軸系で位置決めできるのでモデルとの相性がいい。
  6. 更新は update()などで良い。
  7. 数が増えた場合の負荷は気になる(未確認)
    追記:DrawCellは増加しない様子。
  8. 表示にちょっとクセがある。素直にやると文字がボケボケになる。
    ※今のところの試行では回避策有り。



■文字の扱い

2D文字は3D空間座標系単位とは異なる。  → モデルに合わせた位置合わせが困難。というより無謀かもしれない(できるにはできるがとんでもなく面倒なあわせこみが)。
異解像度デバイス間の対応を考えると厳しい。
※一旦テクスチャ変換とかして、3D空間座標系に持っていけばどうか?(要確認

多分2Dの方が処理は軽い?と思うので、限定的な仕様の中でうまく合わせこめば軽い可能性?
ただし動的に扱うと多分大変。

3Dモデルは3D空間座標系の単位を基準にしている。
こっちの方が3Dではいろいろ都合が良いが、メッシュなので描画重さが気がかり。




関連記事:「Unity-Sample集 ~ メッシュテキスト


0 件のコメント:

コメントを投稿