山椒は小粒でもピリリと辛い

2013/01/27

[NGUI]UIGrid.cs内のrepositionNow

NGUIのUIGridの中で
repositionNow
スクリーンショット 13 01 25 17 58 という機能が気になってちょいと調べてみました。
(機能としてはチェックすると、中のUIパーツを綺麗に整列 してくれるってもの)

Sample Project

https://github.com/mogeta/UnityUtil
内のRePositionにプロジェクトを添付してあります。
中身は指定したターゲットの真ん中にポジションをセットする。というもの

解説

UIGridは[ExecuteInEditMode]を宣言しており、
ゲームを起動している状態でない(編集中)でもUpdate ()
が呼ばれるようになっています。

Sample Code

NGUIのボタン等につける
Xpos :そのボタンが左から何個目か
buttonNum :ゲーム上に存在するボタンの数
using UnityEngine;
using System.Collections;

[ExecuteInEditMode]
public class BottomButtonPosition : MonoBehaviour
{

    public int XPos;
    public int buttonNum;

    public bool repositionNow = false;

    bool mStarted = false;

    // Use this for initialization
    void Start ()
    {
        mStarted = true;
        Reposition();
    }

    // Update is called once per frame
    void Update ()
    {
        if (repositionNow)
        {
            repositionNow = false;
            Reposition();
        }

    }

    public void Reposition ()
    {
        if (!mStarted)
        {
            repositionNow = true;
            return;
        }

        Transform child = transform.Find("Background");
        child.localScale    =   new Vector3(Screen.width / buttonNum, child.localScale.y, 0);
        transform.localPosition = new Vector3(Screen.width / buttonNum * XPos + child.localScale.x / 2, child.localScale.y / 2, 0);
    }
}