West Hill 開発メモ

Unity5.3で追加されたJsonUtilityを少し使ってみました。
http://docs.unity3d.com/ScriptReference/JsonUtility.html

JsonUtility.ToJsonJsonUtility.FromJsonで変換する。

・内部でUnityのシリアライザを使っているので、自前のクラスを含めたい場合、
MonoBehaviourとScriptableObjectを継承していればそのまま変換される。
そうでないクラスや構造体には[Serializable]属性を付けないと無視される。

・DictinaryやHashtableはシリアライズされないため、これも無視される。
回避策として、Json化したいクラスでISerializationCallbackReceiverを継承し、
OnBeforeSerializeOnAfterDeserializeでシリアライズ前、デシリアライズ後のタイミングをフックできるので、List等の別の型に置き換える。

以下、テスト用のコンポーネント。


このエントリーをはてなブックマークに追加 Clip to Evernote

uGUIでワールド位置のオブジェクト上に追従するHUDの実装方法。
ugui_bmfont_07
CanvasのRenderModeが「Screen Space - Cameta」か「WorldSpace」の場合にUI座標を3D空間のオブジェクト位置から取得したい場合、
Camera.WorldToScreenPointで、メインカメラ上のスクリーンポジションを取得して、
RectTransformUtility.ScreenPointToLocalPointInRectangleで、
表示したいUIの親RectTransform配下のローカルポジションを取得します。 

↑の動画では以下のスクリプトコンポーネントをHUD用のUIに付けて、
ターゲットを指定しています。


このエントリーをはてなブックマークに追加 Clip to Evernote

uGUIのTextでビットマップフォント(フォントアトラス)を使う方法です。
Unityのバージョンは5.0.0f4です。

uGUIのTextコンポーネントのFontにカスタムフォントを指定すると表示出来ます。
カスタムフォントについては以下のページの下の方に説明があります。
Unity -Manual:Font - http://docs.unity3d.com/Manual/class-Font.html
ugui_bmfont_05
見た目はあまり変わりませんが、
上がビットマップフォントが適用されたTextコンポーネントで、
下がttfファイルをそのまま指定した場合のダイナミックフォントです。

今回使ったフォントは自家製 Rounded M+になります。
自家製 Rounded M+ - http://jikasei.me/font/rounded-mplus/

ビットマップフォントの生成はBMFont(Bitmap Font Generator)を使用します。
BMFontからは以下の設定で出力しました。
ugui_bmfont_03ugui_bmfont_04
BMFontで出力した.fontファイルから、テキストのuv情報をUnityのカスタムフォントに適用させるため、以下のEditor拡張を使わせてもらいます。

●手順●
1.ChrRectSet.csをEditorフォルダ配下に、
BMFontで吐き出されたpngとfontファイル(拡張子を.txtに変更)を適当な箇所にインポートする。
テクスチャのインポート設定は以下のようにしました。
ugui_bmfont_02
2.UnityEditorのProjectView上で右クリック→「Create」→「Custom Font」を指定してカスタムフォントを作る。

3.カスタムフォントに割り当てるマテリアルを新規作成する。
シェーダーはなんでもよいが「Unlit/Texture」にしておく。
カスタムフォントのDefaultMaterialにマテリアルを設定。

4.メニューから「Custom」→「Custom Font Setting」→「ChrRectSet」を選択し、
カスタムフォントにuv設定を反映させる。
詳しい手順はChrRectSet.cs-使い方を参照。

5.カスタムフォントのAscii Start Offsetに、使う文字の一番最初のASCIIコードを入力。
LineSpacingに改行時のスペースサイズを入力。
通常はビットマップフォント作成時のフォントサイズで良いかと思う。
ugui_bmfont_06
6.uGUIのTextコンポーネントのFontに↑で作ったカスタムフォントを指定する。
カスタムフォントの場合はfont sizeを変更しても反映されないため、
サイズ変更はスケーリングで行う必要がある。
以下のコンポーネントを付ければ、BMFontで設定したフォントサイズを元にスケーリングできる。
ugui_bmfont_01

Textを作って、カスタムフォントを適用して、BitmapFontScalerをアタッチする流れを
自動化したEditorスクリプトも作ったので、Editorフォルダ配下に入れておくと便利。
右クリック→「UI」→「Bitmap Font Text」で上記のテンプレGameObjectが作られる。
ugui_bmfont_07
DEFAULT_FONT_PATHを適宜変更して使用する。

※カスタムフォントは内部で文字ごとのuv座標をすべて持っているので、文字数に比例してデータサイズが大きくなります。
(半角文字すべて+かなカナ+第一水準漢字+全角記号で約1MB)
このエントリーをはてなブックマークに追加 Clip to Evernote

このページのトップヘ