トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

unity_ngui_sprite_pos_size

[NGUI] Spriteの位置/サイズをスクリプトから変更


UIAnchor/UIStretchを使わずに手動でスクリプトからSpriteの位置やサイズを変更します。
直接位置とサイズを指定しますので、SpriteでUIAnchor/UIStretchを使用している場合ははずす、
UISpriteのAnchorsのTypeはNoneにしておきます(Unifiedでも強制的に変更されるようですが)。

int screenWidth  = スクリーンの幅;
int screenHeight = スクリーンの高さ;
int x1, y1;   // 矩形の開始位置
int x2, y2;   // 矩形の終了位置

GameObject parentGameObject = GameObject.Find("UI Root") as GameObject;
GameObject gameObject = GameObject.Find("sprite名") as GameObject;
if (gameObject != null) {
  UISprite sprite = gameObject.GetComponent("UISprite") as UISprite;
  if (sprite != null) {
    UIRect rect = sprite.GetComponent("UIRect") as UIRect;
    rect.SetAnchor(parentGameObject, x1, y1, x2 - screenWidth, y2 - screenHeight);
  }
}

screenWidth, screenHeightはUI Rootでの全体のスクリーンサイズを指定します(「UI Rootの全体サイズを取得」参照)。

SetAnchor関数の第一引数に指定したSpriteからの相対的な位置とサイズを与えます。

(x1, y1) - (x2, y2)の範囲にSpriteを移動させます。スクリーン左下が(0, 0)、右上が(screenWidth - 1, screenHeight - 1)となります。

GameObject gameObject = GameObject.Find("sprite名") as GameObject;

で対象となるSprite名を指定してGameObjectとして取得、

UISprite sprite = gameObject.GetComponent("UISprite") as UISprite;

で「UISprite」コンポーネントを取得しています。
この中の「UIRect」を取得しSetAnchorで表示位置/サイズを変更します。
このときの第一引数は相対的な親のGameObjectを指定しますが、スクリーン全体での位置指定になる場合は、UI Rootを参照しても同じになるようです。
第二引数は左端からの移動値、
第三引数は下からの移動値、
第四引数は右端からの移動値、
第五引数は上からの移動値、
となってます。

これで、画面内の任意の位置に正確にSpriteを配置できます。
モバイルで縦横の切り替えを意識したり、解像度が異なる端末で同じように見える調整などでは、UIAnchor/UIStretchよりも使い道が出てくる場合もありそうです。

 Anchorsをnoneにする


UIRectのSetAnchorでSpriteの位置と大きさを指定した場合はAnchorsに値が入った状態になります。
ScrollViewを使用する場合は、ScrollView内の各項目でのAnchorsはNoneである必要があるようで、これを変更しておく必要があります。

スクリプトではUIRectであるrectに対して以下のようにするとAnchorsをNoneにできます。

rect.leftAnchor = new UIRect.AnchorPoint();
rect.rightAnchor = new UIRect.AnchorPoint();
rect.bottomAnchor = new UIRect.AnchorPoint();
rect.topAnchor = new UIRect.AnchorPoint();


最終更新時間:2014年02月19日 10時00分34秒