!!![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}}