トップ 一覧 検索 ヘルプ 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の全体サイズを取得|unity_ngui_get_root_size]]」参照)。
 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である必要があるようで、これを変更しておく必要があります。
{{ref_image ngui_anchor_none.png}}
スクリプトではUIRectであるrectに対して以下のようにするとAnchorsをNoneにできます。
 rect.leftAnchor = new UIRect.AnchorPoint();
 rect.rightAnchor = new UIRect.AnchorPoint();
 rect.bottomAnchor = new UIRect.AnchorPoint();
 rect.topAnchor = new UIRect.AnchorPoint();

----
{{lastmodified}}