[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秒