タグ別アーカイブ: Unity:NGUI

[Unity3D][NGUI]Atlasをスクリプトで読み込む

NGUIは複数のスプライトのテクスチャを1つのアトラスにまとめて管理する便利な機能がついてる。
ただ、スクリプトで生成したUISprite付きGameObjectにSpriteを割り当てるには先にUIAtlasを渡さなければならない。

スクリプトでどうやるのかしらべたところ、AtlasをInstantiateしてるサンプルを見つけた。
NGUIをスクリプトのみで構築したいので調べてみた

しかしこれだとScene上にPrefab(Clone)た配置されてしまうし、読む都度Cloneが生成されて美しくない。
そのうえ、 Instantiate した PrefabDestroy するとせっかく読んだ Sprite は参照が missing で表示されなくなる。

というわけで色々試した結果、以下のスクリプトで対応できた。

続きを読む

[Unity3D][NGUI]ボタンの作り方最小構成

環境

  • Unity3D : 4.5.1f3
  • NGUI : 3.7.4

やること

  • ボタン用のGameObjectを作る … A
  • AにButtonとUILabelかUISpriteをアタッチする
  • AにBoxColliderをアタッチする
  • ボタンを押した時用のスクリプトを書く … B
  • BをAにアタッチする。
  • AにアタッチしたButtonのイベント
  • 実はBはAにアタッチしなくても良い。

続きを読む

Unity+NGUIで3Dオブジェクトに2D表示を行う

下準備・用意するもの

  • UISpriteオブジェクトを用意
  • 2Dカメラ(NGUIから Create New UI で作ったやつ)
  • 3D空間のカメラ(mainカメラ)
  • 3D空間のブジェクト

サンプル

gist

やってること

  1. 3Dカメラでワールド座標からスクリーン上の座標に変換
  2. 1の値を別のカメラのスクリーン座標上に変換
  3. 2D上に表示させたいアイテムのx,y座標だけ2で得た座標を上書き

※zは描画順やカメラの有効射程から外れるので無視。

ポイント

UISpriteは bottom に原点がくるように指定する。

bottomにすると原点が中央下部になるので、3Dオブジェクトのちょい上にあらかじめ表示が可能になる。

Spriteオブジェクトが乗ったパネルオブジェクトをPoint2DのplaneObjectに参照させる

そうするとパネル内で表示物を切り替えたりするときに便利だから。

ゲームメカニクス  おもしろくするためのゲームデザイン (ゲームデベロッパー)

のめりこませる技術 ─誰が物語を操るのか

NGUI用にフォントテクスチャを作って表示するまで

[wp_ad_camp_1]

使ったツール

bmGlyph

作り方

流れ

  • bmGlyphをDL
  • ひらく
  • フォントを選ぶ
  • テクスチャ化したい該当文字を入力する
  • Publish!
  • Unityでフォントプレファブを作成する
  • UILabelで出してみる

使用するフォントの選択

日本語が使えるフォントと使えないフォントが入り交じっているが、表示用文字挿入カラム内に日本語を入力してフォントを選択することで、日本語フォントを内包するフォントを洗い出す事が出来る。
試用不可能な場合は画像の様に使用可能には見えなくなる。

bmGlyph

フォント一覧カラム内をアローキーで順繰りにしていけばプレビューに日本語が表示されるので、仕様可否が判別できる。
JapaneseFont
日本語が表示可能だとプレビューが変化する。

一つ注意をするとすれば、フォントを選ぶ際は最低限の文字列で行うべきだ。プレビュー作成にけっこうな時間を要してしまう。

必要な文字列の抽出

青空文庫のサイトで漢字の基準がまとまってUPされている。
青空文庫

ここから任意の基準の文字列をDLしてbmGlyphに記入する。

エラーが出る

suffixを記述しないとその旨のエラーが出る。
記述してもエラーが残る場合は、bmGlyphを再起動することで回避できる。
Error

NGUI Font Makerでフォントを作成する

bmGlyphで作成したテクスチャとテキストデータをドラッグしてフォントを作成する。
名前を新たにつけておく。
NGUI_FontMaker

Create the Fontをクリックしてしばらく待つとドラッグ元にプレファブが生成される。

UILabelに実際に文字を入れてみる

UILabelをアタッチしたオブジェクトに名前を入れる。

Test_UILabel

ちゃんと表示された。”晋弘”部分はフォントに無いので表示されない。

Test_UILabel2

このとき、UILabelのx,yのスケールはポイントを表すので画面サイズに対して何ポイントで表示させたいかでスケールを決める必要がある。
またUILabelには文字数の上限があって、1800文字程度入力すると表示がされなくなる。

よって、規約などの文字列がおおいものを一度に表示するのではなくて、複数のオブジェクトに分けるか、WebViewを出現させるスクリプトを仕込んで別アプリケーションで対応させるなどが現実的だ。

参考